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 uninstall charlock_holmes
Successfully uninstalled charlock_holmes-0.7.5
# bundle install

要は、該当の gem を消してしまえば bundler が勝手に再ビルド、再インストールしてくれます。

https://manimani.cc/lib/plugins/linkback/exe/trackback.php/blog:2018:20180206174410_bundler_reinstall