rubyscript2exeが例外can't modify frozen string (TypeError)で動作しない問題
debian lennyのruby 1.8.6の環境で、gemから取ってきたrubyscript2exe 0.5.3がcan't modify frozen string (TypeError)という例外を出して動作してくれませんでした。
ソースを見るとString#replaceでコケており、Rubyのバージョン(?)によって組み込み変数$0などがデフォルトでfrozenされているのが問題のようでした(etchの1.8.5だとこの例外は出なかった)。
例外が出た以下3箇所を場当たり的に書き直したら動作しました。String#replaceを使う必要は特になさそうだったので、単純に代入に置き換えました。またGem::Exceptionは無いと言われたので、単なるExceptionを継承するようにしました。
/var/lib/gems/1.8/gems/rubyscript2exe-0.5.3/bin/rubyscript2exe 5行あたり
- $0.replace(realstuff) if isapplication + $0 = realstuff if isapplication
/var/lib/gems/1.8/gems/rubyscript2exe-0.5.3/realstuff.rb 621行あたり
- $0.replace(File.expand_path("./init.rb")) + $0 = File.expand_path("./init.rb")
/usr/lib/ruby/1.8/rubygems/remote_fetcher.rb 19行あたり
- class FetchError < Gem::Exception + class FetchError < Exception
正しいかは微妙なところですが、これでひとまずどうにかなっています。debianだけでなくRubyのバージョン依存だとしたら同じ所でひっかかる人も居るのではと思います。rubyscript2exeは07年5月からメンテナンスされていませんが、対策されないのでしょうか。