ruby1.8系のocraが動かない

なんだか「ruby ocra」で検索してこのブログにたどり着く人がとても多い。
日本語でのocraの記事が現状ほとんどないから、数少ない情報源ということになっているのかもしれない。


Ruby1.9.1の起動パスの問題でDXRubyスターターキットが微妙な位置づけになってしまっているので、Ruby1.8を使ってスターターキットを作ろうとしたところ、どういうわけかocraが動かない。

D:\temp>ocra.rb.bat game.rb
c:/Program Files/ruby-1.8/bin/ocra.rb:19:in `load': no such file to load -- "c:/
Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/ocra-1.1.1/bin/ocra.rb" (LoadError
)

binの下のocra.rbから、libの下のocra.rbを動的に読み込もうとしているところだ。
パス名はどれだけ比較しても間違っておらず、そこにファイルは確かにある。
何日かほったらかしにしてあったのだが、やっぱり動かないと困るから調べてみた。
loadしてるところの上に、loadパスを出力するコードを突っ込んでみる。

p Gem.bin_path('ocra', 'ocra.rb', version) #←追加
load Gem.bin_path('ocra', 'ocra.rb', version)

出力されたのはこんな文字列。

"\"c:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/ocra-1.1.1/bin/ocra.rb\""

ダブルコーテーションがパス名に入っているようだ。
はて、これって有効なのか?

load Gem.bin_path('ocra', 'ocra.rb', version)[1..-2] #←最後のとこ追加

として削ってみたところ、ちゃんと動いてexeができた。
ocraのバージョンは1.1.1、Rubyruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]だ。


なお、Ruby1.9.1のocraではこのような問題は起きない。
起きないが代わりに環境変数TMPが日本語を含むパスだと動かないから、それはそれで困ったもんだ。
しかしダブルコーテーションってべつに日本特有の問題でもないだろうに、他のところでは動いてるんだろうか。
ひょっとしてウチだけの問題?


あと、これは1.8系でしか確認してないが、site_rubyじゃなくvendor_rubyのほうを優先的に検索してライブラリを取得するようなので、そのへん注意が必要だ。