Grid-Server で RMagick を使うときの注意点

Media Temple 関係で書くことがふえたので “Media Temple” というカテゴリーを追加してみました。いつもどおりメモ書き程度に使っていきたいと思います。

Ruby on Rails の Acts as Attachment というプラグインを使ってみました。これはアップロードされた画像ファイルの管理を楽にしてくれるもので、ちょっとした設定で、画像をデータベースに保存したり、ファイルシステム上に保存したり、サムネイルを作ってくれたりと、基本的なことはひととおり面倒を見てくれます。手軽で便利なので気に入っています。

さて、このプラグインは中から RMagick の gem を require するんですが(画像のサイズを測ったりサムネイルを作ったりする際に必要になるため)、Grid-ServerRuby on Rails Container で RMagick を使う場合にはひとつ注意点があります、ということを今週教わりました。

RMagick の gem は、Ruby on Rails Container 専用の特注品が用意されているのでそれを使います。

gem install RMagick --source=http://gems.mediatemple.net/

しかしそれでも rake migrate の際にエラーが返ってきました。RMagick が関係しているっぽいです。

$ rake migrate RAILS_ENV=production --trace
...
rake aborted!
uninitialized constant Enum
/home/xxxx/data/rubygems/gems/gems/activesupport-1.3.1/lib/active_support/dependencies.rb:123:in `const_missing'
/home/xxxx/data/rubygems/gems/gems/rmagick-1.13.0-i386-linux/lib/RMagick.rb:28
...

Google で探してみると同じような話が詳しく書いてありました。Mongrel のウェブサーバにシェアードライブラリのパスを持たせてないのが原因、というような話で、よくわかりませんが今回のケースもそれと関係あるんじゃないかと思いました。

それで Media Temple のサポートに問い合わせてみたんですが、半日待たずに返事がありまして、ナレッジベースの記事を教えてくれました。どうも問い合わせたちょうどその日に公開された記事のようです。それによると RMagick の gem を require するときに発生する例外を受け流すようにコードを付け足す必要があるということ。

Acts as Attachment の場合は vendor/plugins/acts_as_attachment/init.rb を次のように、

begin
  require 'RMagick'
rescue LoadError
  # boo hoo no rmagick
rescue NameError
  # RMagick didn’t load right
end
…

これで解決。どんぴしゃです。

そんなわけで Media Temple のナレッジベースが徐々に充実してきています。

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*