HerokuでRMagickを使おうとしてrequireでハマった
HerokuでRMagickを使おうとしてハマった。結論を先に書くと、require
するときは小文字のrmagick
じゃダメで、ちゃんとキャピタライズされたRMagick
じゃないといけなかったみたい。MacとWindowsでローカルで使ってたときは小文字で普通に使えてたので、原因に気づくまでちょっと時間が掛かった。あと、BundlerでBundler.require
するときも、そのままでは同じところでハマるので注意が必要。
小文字は不正解
require
に大文字が混じるのは、個人的にはなんとなくダサい感じがするので、小文字で動くなら小文字で書きたいところだけど、RMagickは許してくれなかった。
require 'rmagick' #=> 不正解
require 'RMagick' #=> 正解
前者だとHerokuではApplication Errorになる。エラー時のログの該当箇所を抜粋。
[2011-04-07T02:35:04+00:00 app[web.1]: [/usr/ruby1.8.7/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- rmagick (LoadError)
Bundler.require
Bundlerを使ってBundler.require
する時もこれでハマるので、Gemfileの書き方をちょっと変える必要がある。
gem 'rmagick' #=> 不正解
gem 'rmagick', :require => 'RMagick' #=> 正解
Bundler.require
した時に、RMagick
ではなくrmagick
と記述してしまっているときのエラーは、前述のApplication ErrorではなくInternal Server Errorになるっぽい。