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、Rubyはruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]だ。
なお、Ruby1.9.1のocraではこのような問題は起きない。
起きないが代わりに環境変数TMPが日本語を含むパスだと動かないから、それはそれで困ったもんだ。
しかしダブルコーテーションってべつに日本特有の問題でもないだろうに、他のところでは動いてるんだろうか。
ひょっとしてウチだけの問題?
あと、これは1.8系でしか確認してないが、site_rubyじゃなくvendor_rubyのほうを優先的に検索してライブラリを取得するようなので、そのへん注意が必要だ。