Exerb と RubyGems

RubyGems を使ってる RubyスクリプトExerbWindows実行形式にしても、LoadError になって起動しない。

純化した Rubyスクリプト

require 'rubygems'
puts 'Hello!'

Rubyで実行すれば普通に動きます。
exyファイル作成後 exerbコマンドで実行形式にし実行した場合にエラー

rubygems.rb:349:in `clear_paths': no such file to load --
rubygems/specification
 (LoadError)
        from rubygems.rb:1235

実行環境

  • Windows 7 Professional SP1 (64bit)
  • ActiveScriptRuby (1.8.7.36)
  • Exerb 5.3.0
  • gem 1.8.5

恐らくは autoload の影響かと思われ、"C:\Program Files (x86)\ruby-1.8\lib\ruby\site_ruby\1.8\rubygems.rb" の 1235行目で Gem.clear_paths を実行し、その際 349行目で Gem::Specification.reset を実行、 1141行目で autoload 設定していた rubygems/specification をロードしようとしてエラーになるのでしょう。

一応先に require しておけば回避できますが、ちょっと ad hoc に過ぎる。

module Gem; VERSION = '1.8.5'; end
require 'rubygems/specification'
require 'rubygems'
puts 'Hello!'

あとは rubygems.rb の autoload 設定を require に書き換えるとかかな。ちなみに VERSION の値には使ってる gem のバージョンを書くべきでしょう、今、gem のバージョンと ruby のバージョンがちょうど似かよってるところで混乱しないよう注意。

参考、ML exerb-developer 保存書庫より