バージョン依存には気をつけよう

Nokogiri(1.4.4.1 x86-msqin32)で、XMLパースするスクリプトを、
Exerb(5.3.0)でexeファイルに固めた。

実行したら

rbconfig.rb:7: ruby lib version (1.8.6) doesn't match executable version (1.8.7) (RuntimeError)

あーーー(´д`;;;

Nokogiri使ってないスクリプトは、エラー出ない。
このことから、おそらくNokogiriのバージョンによってエラーが引き起こされていると予想。

このエラー自体は

私のインストール環境のパスですが
C:\Ruby\lib\ruby\1.8\i386-mswin32\rbconfig.rb

# This file was created by mkconfig.rb when ruby was built.  Any
# changes made to this file will be lost the next time ruby is built.

module Config
  RUBY_VERSION == "1.8.6" or
    raise "ruby lib version (1.8.6) doesn't match executable version (#{RUBY_VERSION})"

  TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/1.8/i386-mswin32")
  DESTDIR = TOPDIR && TOPDIR[/\A[a-z]:/i] || '' unless defined? DESTDIR
  CONFIG = {}

#以下略

このRUBY_VERSIONの部分でraiseで出してるみたい。

エラーの意味合いからすると、
Nokogiriのバージョンというよりも、実行しているRubyのバージョンと、
rbconfigで定義されているバージョンが一致せずに出しているエラーって所か。


調べていくと、
Exerb(5.3.0)に内包されているRubyの実行バージョン(安定コア)がRuby 1.8.7-p330
私の開発に用いたのが、Ruby 1.8.6

しもーたー。


選択肢
・pikで1.8.7に切り替えてスクリプトを再度動作テストしながらExerbで固める
Exerbのコアのバージョンが1.8.6の物を探して、それを使う
Exerbでコア指定のオプションつける(軽く調べた限りでは出来そう?)
さて、どれが一番楽か・・・。


ここに来て、実装し直しだけはしたくない!



何がいけなかったのかってのは、
Nokogiriを用いないスクリプトでは事前にExerbの動作を色々テストしてたんだけれども、
Nokogiriの簡易的な実行スクプリトを書いた段階で、
Exerbでexeファイルに固めて動作テストしなかったことだね。
これによって、ExerbにNokogiriも含めたexeファイルを生成して実行していなかったので。
これが敗因だなー。甘くみてたなー。


さて。色々調べよっと。

パッと考えると単純に、
Exerbのバージョンを安定コア1.8.6の物で再実行すれば一番簡単にいける状況な気もする。


よもや夜中に心を折られかけるとは思わなかったわ。

調査開始



追記 0:54

仕事でこういう状況があったとしたら、まず安定に走らせるってことで事前調査や段階的なテストが大事だろう。
もし、最悪こんな状態に陥ったなら、最善かつ最速の方法は、Exerbのバージョンを下げて標準のコアが1.8.6のものを選択し直して再度やってみる・・・ってとこかな。
(難度も下がるし)


ただ、今回はプライベートな事で時間もあるしバグも許される事と、
そもそも最新のバージョンで、オプションにより対応出来るなら、そちらを取るべきかなー。
Exerbのバージョンを下げるのは簡単そうだけど、あんまり調査能力を成長させないような対応をするのは今後のためにならなそうだし、調査・対応能力を養うためにもオプションで対応する方法を取る方向にシフト。



追記 1:32

Exerbのレシピファイル(exyファイル)のコアに指定されるのが、
cuiguiとかそういった値みたいで、
Exerbライブラリに同梱されてるのは1つのバージョンだから、
もしすると1.8.6で固めてね!ってのはやっぱりExerbのバージョン下げないと出来ないのかも。

よくある質問に

Exerbコアを自分でコンパイルする場合には何が必要ですか?
    コアをコンパイルするには、Microsoft VisualC++ 6.0、またはそれ以降が必要です。通常は同梱されているコアを使用するので、コンパイラは必要ありません。

ってあるしなー。

大人しくExerbのバージョンを下げてみる事にする。
が、まずはExerbにインストールの説明はあるけれど、アンインストールの説明がないので、
消す時どうしたらいいのか、もしくは2つ入れて動くのかも要調査かもしれない。
結局この発想に戻ってくるあたり、自分のセンスのなさを若干感じる。
こういうのも、積み重ねで勘を養えるものだと思いたい。

また明日の日中にでも。



2011/6/12 15:10

Exerb 4.2.0がRuby 1.8.6だったので、そっちでやったら動いた。よかった。
アンインストールとか考えなくてもsetup.rbを実行すれば、上書いて使えるようにしてくれるみたい。
exerb -vで、5.3.0は表示されずに4.2.0が表示されたので、おそらく。

後は人の環境でどこまで動くかだな。