人気ブログランキング | 話題のタグを見る

RoR config/boot.rb RAILS_ROOT

config/boot.rb の最初の命令文は、RAILS_ROOT の設定だ。これは次のように代入してある。(boot.rb を参照)

RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)

これは、「__FILE__ で表されるそのファイル(この場合は boot.rb )のパスからディレクトリの部分だけを取り出してそれに"/.."を追加し、RAILS_ROOT に代入する。もし既に RAILS_ROOT に
何か文字列が入っていればそれを変更しない。」という意味だ。

ここで、「ああ、そうか」と思って次の行のコードの解読に移ってもいいのだが、__FILE__ や File.dirname(__FILE__) が一体どんな文字列なのか興味が湧いてきた。そこで、次の内容のファイル a.rb を作って、boot.rb と同じディレクトリに入れてみた。

puts __FILE__
puts "#{File.dirname(__FILE__)}/.."

そうして、~/rails/demo/ ディレクトリから ruby config/a.rb を実行してみたら次のようになった。
~/rails/demo$ ruby config/a.rb
config/a.rb
config/..

出力されたのがフルパスではなかったので不審に思った。相対パスでどうやってファイルを特定できるのだろうか。ふと、これは ruby を実行したディレクトリに関係しているのかもしれないと思いついた。それで、cd .. でディレクトリの階層を一つ上がって、~/rails/ ディレクトリから a.rb を実行してみた。
~/rails/demo$ cd ..
/rails$ ruby demo/config/a.rb
demo/config/a.rb
demo/config/..

当たりだった。実験は大切だ。しかし、そうだとすると、ファイルのフルパスはどうやって取得するのだろう?疑問を持ち始めると果てしない探求が始まるが、くたびれたので個々までにしておこう。そうそう、それと a.rb を削除するのを忘れないようにしなくては。
by tnomura9 | 2008-10-17 21:26 | Ruby | Comments(0)
<< 代入文を関数にする理由 RoR config/boot... >>