Gem のバージョンあげたら大変な目にあった

知りませんでした。Gem って、yum とかと同じで、パッケージ管理をするものだと思ってました。今回、Gem のアップデートがあったということで、以下のように「0.9.4」から「1.2.0」にアップデートしたら、「RMagick 1.13.0」が動かなくなった。


最初に、gem をアップデートした。

$ gem update --system


しばらくして、作っているアプリケーションのテストを通してみると。

Started
E........
Finished in 0.547 seconds.

1) Error:
test_create_image?(PhotoTest):
NoMethodError: undefined method `resize_to_fit' for #
C:/RailsS/rixi/trunk/config/../app/models/photo.rb:212:in `image_resize'
C:/RailsS/rixi/trunk/config/../app/models/photo.rb:196:in `create_image?'
photo_test.rb:135:in `test_create_image?'


む。なんかRMagick 関連で全てこける。「resize_to_fit」が定義されてないとのこと。でも、ソース見るとメソッドあるし。なんでだ。
ためしに、irbでやってみる。

$ irb -r 'RMagick'
> i = Magick::Image.new(10, 10) { self.background_color = 'black' }
> i.resize_to_fit
> NoMethodError: undefined method `resize_to_fit' for #<Magick::Image:0x53a6b4c>


やはりだめだ。なんでか調べてみると、gem のupdate が問題だった。

中のREADME.htmlでも脅されてますが、ImageMagickとRMagickのバージョンはダウンロードしてきたファイル内のものと必ず合わせること、とあります。
gemのバージョンが違うだけでもさっぱり動かないので、おとなしく従っといたほうが利口のようです。


パッケージによってはgem のバージョンに依存してるものもあるんですね。
しかたがないので、gem のバージョンを戻すことを試みる。


む。gem のダウングレードの仕方が分からん。gem って「--version」みたいにバージョンを指定してインストールとかできんのか。「アーカイブ」から「rubygems-update-0.9.4.gem」をもってきて「gem install」してもだめ。update を使ってダウングレードは無理か。
なので、gem自体を入れ直そうとしたら失敗。現在のをアンインストールする前に入れてしまい何がなんだか分からなくなり、ruby ごと再インストール。


gem は「0.9.4」に戻した。
ガーン。何故かまた同じ原因でテストこける。なんなんだ。
これを調べたら、ruby 自体のバージョンも関係していた。以前は「ruby 1.8.6 25(patch level 0) mswin」のFinal Release を使っていたが、再インストールした際には「ruby 1.8.6 26(patch level 111) mswin」のFinal Release 版を入れたため。「ruby 1.8.6 25」版を入れたら動いた。


RMagickのドキュメントには以下のように書いてあるが、うそっぱち。

gem - -version should yield 0.9.0 or higher. Just do that gem update - -system once in a while.


higherで動く保証はない。
「Magick 1.13.0」は「ruby 1.8.6 25 mswin」、「rubygems 0.9.4(2でもいけた)」というかなり制限されたでないと動かない。