RMagickのLoadErrorで迷走した件

CentOS 5.5 (Final)
# unicorn_rails -D -E production -c config/unicorn_production.rb

Unicornを起動すると次のようなエラーが発生して、起動に失敗しました。どうやら共有ライブラリ libMagickCore.so.4が認識されていないようです。

FILE: $RAILS_ROOT/log/unicorn.stderr.log

/opt/ruby-enterprise-1.8.7-2011.03/bin/unicorn_rails must be run inside RAILS_ROOT: #<LoadError: libMagickCore.so.4: cannot open shared object file: No such file or directory - /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/rmagick-2.13.1/lib/RMagick2.so>

/usr/local/libに置かれた共有ライブラリが読み込まれていないようです。ここを参考に、/libディレクトリにlibMagickCore.so.4へのシンボリックを作成します。

# ln -s /usr/local/lib/libMagickCore.so.4.0.1 /lib/libMagickCore.so.4

再びUnicornを起動するとやはり同じエラーが発生して、起動に失敗しました。ImageMagickを./configureするときにいろいろオプションを渡した方がいいようなので、ImageMagickのインストールからやり直します。

# ./configure --disable-static --with-modules --without-perl --without-magick-plus-plus --with-quantum-depth=8 --with-gs-font-dir=$FONTS
# make
# paco -D make install

再びUnicornを起動するとやはり同じエラーが発生して、起動に失敗しました。ここを参考に、共有ライブラリを読み込みます。

# ldconfig /usr/local/lib

無事に起動できました。やはり/usr/local/libに置かれた共有ライブラリが読み込まれていなかったようです。ここでふと、シンボリックリンクを作っただけでは足りなくて、共有ライブラリを読み直す必要があったのではないか、ということに気がつきました。そこでサーバーを再起動すると、、、今度は無事に起動できました。

libMagickCore.so.4を読ませる方法としては

以外にも、

  • LD_LIBRARY_PATHに/usr/local/libディレクトリを追記する*1
  • /etc/ld.so.confに/usr/local/libディレクトリを追記する

といった方法があります。

/usr/local/libディレクトリを読み込みたいケースは他にもありそうなので、『/etc/ld.so.confに/usr/local/libディレクトリを追記する』ことにしました。

FILE: /etc/ld.so.conf

--- /etc/ld.so.conf	2011-04-13 17:35:43.000000000 +0900
+++ /etc/ld.so.conf	2011-04-13 17:32:42.000000000 +0900
@@ -1 +1,3 @@
 include ld.so.conf.d/*.conf
+/usr/lib
+/usr/local/lib

これで解決!