RMagickとRubyGemsのバージョンの関係について

what

RMagickはRubyGemsのバージョンに大きく左右されるというお話。

プログラミング言語 Ruby リファレンスマニュアル


今回の現象に気づいたきっかけ

ImageMagickRMagicを使い、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 でアップデートしたかの違いです。


同じバージョンなのに、なんで違うのでしょうか・・・。
もっと新しいの使えってことでしょうか。。