gem の再ビルド
システムのアップデート(うちの場合は gentoo なので emerge -uDN world
)で mastodon がうまく起動しなくなってしまった時の雑な対処法。
エラーメッセージを読んでみる
今回はうどんワールドで libicu のアップデートが走ってました。そして puma の起動時にコケました。
[2563] Puma starting in cluster mode... [2563] * Version 3.11.0 (ruby 2.5.0-p0), codename: Love Song [2563] * Min threads: 5, max threads: 5 [2563] * Environment: production [2563] * Process workers: 2 [2563] * Preloading application [2563] ! Unable to load application: LoadError: libicudata.so.58: cannot open shared object file: No such file or directory - /home/mastodon/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/charlock_holmes-0.7.5/lib/charlock_holmes/charlock_holmes.so bundler: failed to load command: puma (/home/mastodon/.rbenv/versions/2.5.0/bin/puma) LoadError: libicudata.so.58: cannot open shared object file: No such file or directory - /home/mastodon/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/charlock_holmes-0.7.5/lib/charlock_holmes/charlock_holmes.so : :
charlock_holmes という gem が使用する libicudata.so.58 がロードできないよ、と言っているようです。
調べてみる
bundler が使用する Gemfile を見てみます。
# cd /home/mastodon/live # grep 'charlock' Gemfile gem 'charlock_holmes', '~> 0.7.5'
こいつですね。ちなみに libicudata.so の方はアップデートで 58 から 60 に更新されていました。
# ls -l /usr/lib/libicudata* lrwxrwxrwx. 1 root root 18 Feb 6 17:21 /usr/lib/libicudata.so -> libicudata.so.60.2 lrwxrwxrwx. 1 root root 18 Feb 6 17:21 /usr/lib/libicudata.so.60 -> libicudata.so.60.2 -rwxr-xr-x. 1 root root 26904120 Feb 6 17:21 /usr/lib/libicudata.so.60.2
なので charlock_holmes が libicudata.so.60 を使うようにすればおっけーです。
gem をビルドしなおす
もう少しまともなやり方もあると思うんですが、いつも雑に対処しています。
# gem uninstall charlock_holmes Successfully uninstalled charlock_holmes-0.7.5 # bundle install
要は、該当の gem を消してしまえば bundler が勝手に再ビルド、再インストールしてくれます。