PaperclipでPDFを添付した時に、サムネイル画像の作成で失敗した

Railsアプリで添付ファイルを簡単に実現するために

https://github.com/thoughtbot/paperclip

を利用させてもらってます。


このライブラリを使うとPDFファイルをアップロードして、ついでに画面表示用のサムネイル画像を作る
といった処理も簡単に書けるので重宝してました。


しかし、あるPDFをアップロードしてみたところバックエンドで呼び出される ImageMagick の identify
コマンドがエラーを返してしまいました。


どうやらOSの標準パッケージに含まれる GhostScript のバージョンが古いのが原因っぽいので、これを
バージョンアップ、ついでに ImageMagick も最新に上げる事にしました。


あ、ちなみにOSは CentOS 6.3 32bit

GhostScriptを更新

$ wget http://downloads.ghostscript.com/public/ghostscript-9.07.tar.gz
$ tar zxvf ghostscript-9.07.tar.gz
$ cd ghostscript-9.07
$ ./configure --disable-compile-inits
$ make
$ sudo make install

ImageMagickを更新

事前にrpmforgeは使えるようにしておいて、
まずはrpmのビルドに必要なrpmbuildをインストール

$ sudo yum install rpm-build

次に、ImageMagickのrpmをビルドするのに必要な各種パッケージをインストール(この辺りは環境に応じて色々と変わる)

$ sudo yum install bzip2-devel
$ sudo yum install freetype-devel
$ sudo yum install libjpeg-devel
$ sudo yum install libpng-devel
$ sudo yum install libtiff-devel
$ sudo yum install giflib-devel
$ sudo yum install ghostscript-devel
$ sudo yum install djvulibre-devel
$ sudo yum install libwmf-devel
$ sudo yum install jasper-devel
$ sudo yum install libtool-ltdl-devel
$ sudo yum install libXt-devel
$ sudo yum install lcms-devel
$ sudo yum install librsvg2-devel
$ sudo yum install OpenEXR-devel

で、ImageMagickのrpmをsrpmから作り直してインストール

$ wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/linux/SRPMS/ImageMagick-6.8.3-2.src.rpm
$ sudo rpmbuild --rebuild --clean --rmsource ImageMagick-6.8.3-2.src.rpm
$ sudo rpm -Uvh /root/rpmbuild/RPMS/`uname -i`/ImageMagick-*.`uname -i`.rpm


これまでの作業が終わった段階で、コマンドラインで
gs --version
identify --version
を実行すると、たしかに両方とも最新になってる。

問題となったPDFファイルに対して identify コマンドを実行すると期待した値が返ってくる。


よしよし、これで万事解決した。
さーてRailsのアプリからもアップロードしてみるか・・・・



失敗。。


なんで???


どうやら、Passengerで動作させているアプリの場合、パスとして /usr/local/bin よりも /usr/bin の方が
優先されているらしく、/usr/bin 以下に残っているOS標準の gs コマンドが呼び出されているのが原因のようです。
WEBrickの場合は問題なかったのに)


調べたところ、ImageMagickが形式変換を行う際のパラメータは設定ファイルに定義されているのが分かったので
http://blog.loadlimits.info/2010/04/imagemagick%E3%81%AEpdf%E5%A4%89%E6%8F%9B%E7%94%A8gs%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B/
このサイトに従って

 /etc/ImageMagick/delegates.xml

に記載されている gs コマンドのパスを

 /usr/local/bin/gs

に書き換えたら正常に動作するようになりました。