RMagickとRubyGemsのバージョンの関係について
今回の現象に気づいたきっかけ
ImageMagickとRMagicを使い、Rubyからイメージデータを操作していたのだが、gem update --system をして gems自身をアップデートしたら、動かなくなった・・・orz
RubyGemsのREADMEを読んで、RubyGemsの対応バージョンを知る
http://rubyforge.org/frs/?group_id=12&release_id=8170から rmagick-1.13.0-IM-6.2.9-0-win32.zip をダウンロード&解凍します。その中にある、README.html を読んでみると。
This distribution comes in the form of a Rubygem, since I firmly belive that is the way to go for distribution of ruby libraries. You should have a working copy of rubygems, which can be downloaded from rubygems.rubyforge.org. Oh, and erm.. gem --version should yield 0.9.0 or higher. Just do that gem update --system once in a while.
と書いてありますが・・・
http://rubyforge.org/frs/?group_id=167
こちらの、
1.8.6-26 Release Candidate 1
1.8.6-26 Release Candidate 2
1.8.6-26 Final Release
に付属しているRubyGems0.9.4ではうまく動きません・・・orz
1.8.6では 1.8.6.-25 の RubyGems0.9.2 だとうまく動くようです。
「0.9.0 or higher」は嘘っぱちですか(´・ω・`)
動かないことを実験
- 実験1
1.8.6-26 Release Candidate 1
1.8.6-26 Release Candidate 2
1.8.6-26 Final Release
の場合。
C:\Image\test.gif というイメージデータがあるのが前提です。
C:\Rails_app>ruby script/console Loading development environment. >> original = Magick::Image.read("C:\\images\\test.gif").first >> w,h = 100,50 => [100, 50] >> resized = original.resize_to_fit(w,h) NoMethodError: undefined method `resize_to_fit' for #<Magick::Image:0x4966ec4> from (irb):5
再現した。たしかに、このオブジェクトにはresize_to_fitというメソッドがない。
- 実験2
1.8.6-25
の場合。
C:\Image\test.gif というイメージデータがあるのが前提です。
C:\Rails_app>ruby script/console Loading development environment. >> original = Magick::Image.read("C:\\images\\test.gif").first >> w,h = 100,50 => [100, 50] >> resized = original.resize_to_fit(w,h) >>
成功。ちゃんとサイズが変更されたイメージが生成されている。何が違うんでしょうね・・・。
RubyGemsのバージョンダウングレードの方法
うまい方法が見つからなかったのですが・・・。
gem update --system でアップデートすると、 gem list に rubygems-update というのができるので、それを uninstall すればいいのかと思い、gem uninstall rubygems-update やったのですがバージョンは戻りません。うう。
ということで、Rubyを再インストール、ライブラリも再インストール・・・しかないのか?RubyGems自身のバージョンを戻す方法は・・・。
参考
http://docs.rubygems.org/read/chapter/5
RMagickをインストールしてみる(Windows) - Katawara.*
上記を見ると、RubyGemsとrmagickのバージョンには関係があるのがわかります。
しかし、RubyGemsというのは、パッケージ管理システムじゃないのでしょうか。。なんでこんなにライブラリの動きに影響が・・・。
RubyGemsは gem update --system と 直接ダウンロードして ruby setup.rb を実行するのとでは違うのか?
OS : Windows XP
C:\>ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
C:\>gem -v
0.9.4
Rails : 1.2.3
RMagick-1.13.0-win32
ImageMagick-6.2.9-0-Q8-windows
※上記の環境は、2007-9-17 に構築した環境ですが、当時はRuby 1.8.6-25 をDL&インストールして、 gem update --system をやると gem 0.9.4 になりました。これだと、動くのです。しかし、上記の実験のように、1.8.6-26 Release Candidate 1 、1.8.6-26 Release Candidate 2、1.8.6-26 Final Release に含まれる gem 0.9.4 だと動かないのです。
※また、Ruby 1.8.6-25 をダウンロードして、RubyGems 0.9.4 をダウンロードして setup.rb を実行して gem のバージョンを 0.9.4 にしても動かないのです。違いは、gem update --system でアップデートしたか、 setup.rb でアップデートしたかの違いです。
同じバージョンなのに、なんで違うのでしょうか・・・。
もっと新しいの使えってことでしょうか。。