今日のはまり道。
mod_rubyのハンドラruby-runから読み込まれるスクリプト foo.rbx と、そこから require される bar.rb があったとして:
[foo.rbx]
module Foo
require 'bar'
print Bar
end
[bar.rb]
module Foo
Bar = "bar"
end
これをmod_ruby経由で実行すると、何故か Bar がundefined constatnsになるですよ。これが何でかすぐ分かった方は結構rubyistかな?っていうかmod_rubyist?
え?普通に分かるものですかね?
断続的に午後中悩んで、でもどうしても解決しなきゃいけなくて結局2,3時間が露と消えたな。最初からこういう風に問題が整理されてればスグに解決できたんだろうけど、他のこまごまとした問題とも合わさってて、結構な時間を食ってしまいました。っていうかこんなの久々だなー。もうこの手ことは自分とは無縁だと思ってたのでちょっと新鮮(わ
で、結論としてはruby-runハンドラはスクリプト(この場合 foo.rbx)を load で、しかも第二引数を真にして呼び出す(== 無名モジュールをトップレベルとする名前空間にロードする)ので、その後通常のrequireで呼び出される bar.rbに定義されている(通常の名前空間にロードされる)module Fooとは同じmoduleとは見做されないのですね。
やー、いい経験だったー、っていうか、それほど忙しくない時期で助かったなー(ぉ
まぁそれはそれとして、9月は連休も多いし、心置きなく自分に投資しよう。おー。
海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs