Rubyのライブラリィ検索パス
前回のエントリでは、RubyForIISのインストールによって意図しないバージョンのmysql.soがロードされたことでトラブルになったことを書いた。
それで初めて気になったのだが、Rubyにおける実行時にライブラリィの検索パスはどうなっているのだろう。
ライブラリィ検索順はグローバル変数 $LOAD_PATH※にセットされている。私の場合、ENV['RUBY_HOME']はe:\rubyなので、以下のようになる。
irb(main):001:0> puts $LOAD_PATH e:/ruby/lib/ruby/site_ruby/1.8 e:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt e:/ruby/lib/ruby/site_ruby e:/ruby/lib/ruby/vendor_ruby/1.8 e:/ruby/lib/ruby/vendor_ruby/1.8/i386-msvcrt e:/ruby/lib/ruby/vendor_ruby e:/ruby/lib/ruby/1.8 e:/ruby/lib/ruby/1.8/i386-mswin32 . => nil
なるほど。
RubyForIISをインストールしたとき、問題のmysql.soはE:\ruby\lib\ruby\site_ruby\1.8\i386-msvcrt\に配置されるので、期待されているmysql.soよりも早く検出、ロードされたと考えられる。
では、その期待されているmysql.soも格納されているrubyGemsでインストールされたライブラリィのプロービングはどのようになっているのだろう。
と、どんどんと深みにはまるのだった。
※他にも $: というグローバル変数にも同じ内容がセットされている。
組み込み変数 - Rubyリファレンスマニュアル