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
に書き換えたら正常に動作するようになりました。