Rabbit 1.0.4 をWindows環境でインストールするには

ruby 1.9.2p290 (2011-07-09) [i386-mingw32]

ruby 1.9.2で久しぶりにrabbitをインストールしようとしてみました。失敗です。

c:\ruby\bin>gem install rabbit
ERROR:  While executing gem ... (ArgumentError)
    undefined class/module YAML::PrivateType

rabbitが依存しているrdtoolで試してみました。これも失敗。

c:\ruby\bin>gem install rdtool
ERROR:  While executing gem ... (ArgumentError)
    undefined class/module YAML::PrivateType

ちなみに同様なことで困っている人がいました。



トレースを見るにc:\ruby\lib\ruby\site_ruby\1.9.1\rubygems\specification.rb
のMarshal.loadでYAMLのオブジェクトをロードしようとしてコケていました。

なんでそんなことになるのかgem fetchで入手したgemを解凍して調べてみました。
metadataを眺めていたらとても怪しい文字列が。

rubyforge_project: !!null 

試しにirbで似たのを評価してみると、

irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> YAML.load("aaa: null")
=> {"aaa"=>nil}
irb(main):003:0> YAML.load("aaa: !null")
=> {"aaa"=>nil}
irb(main):004:0> YAML.load("aaa: !!null")
=> {"aaa"=>#<Syck::PrivateType:0xdcdb38 @type_id="null", @value="">}

こんな感じになりました。なんでmetadataがこんなことになっているのかはわかりませんが。

というわけで、急場しのぎにはyamlをrequireしてあげればとりあえず問題を回避できることがわかりました。

さて、ここまでの話なんですが、Rabbitのリリースアナウンスに

http://www.cozmixng.org/~w3ml/index.rb/rabbit-shockers/msg/895

もしかしたら、

  % ruby -r yaml -S gem install rabbit

としないとダメかもしれません。

としっかり書かれていました。既知でした。