RakeとCWD
/tmp/rake-exampleに以下の内容のRakefileを作る。
task :default do
p pwd: Dir.pwd, rakefile: __FILE__
end
/tmp/rake-exampleでrakeコマンドを実行する。
$ rake
{:pwd=>"/tmp/rake-example", :rakefile=>"/tmp/rake-example/Rakefile"}
デフォルトタスクdefaultが実行され、カレントディレクトリと読み込まれたRakefileのパスが表示される。
次に、適当にディレクトリを作って、そこでrakeコマンドを実行する。
$ mkdir -p foo/bar
$ cd foo/bar
$ rake
(in /tmp/rake-example)
{:pwd=>"/tmp/rake-example", :rakefile=>"/tmp/rake-example/Rakefile"}
ディレクトリfoo/barにはRakefileがないため、親ディレクトリをたどってRakefileを探索する。見付かったRakefile(ここでは/tmp/rake-example/Rakefile)を読み込んでタスクを実行する。
その際にカレントディレクトリをRakefileのある場所に変更している。このことはrakeコマンドからの出力に(in /tmp/rake-example)が増えたことでも確認できる。
次に、グローバルRakefileを読み込むよう指示してみる。ただしデフォルトのグローバルRakefileの探索場所である~/.rakeはない。
$ pwd
/tmp/rake-example/foo/bar
$ rake -g
(in /tmp/rake-example)
{:pwd=>"/tmp/rake-example", :rakefile=>"/tmp/rake-example/Rakefile"}
-gオプションを付けないときと変わりがない。そこで~/.rake/baz.rakeを/tmp/rake-example/Rakefileと同じ内容で作る。
$ mkdir ~/.rake
$ cp /tmp/rake-example/Rakefile ~/.rake/baz.rake
再びrake -gを実行する。
$ pwd
/tmp/rake-example/foo/bar
$ rake -g
(in /tmp/rake-example/foo/bar)
{:pwd=>"/tmp/rake-example/foo/bar", :rakefile=>"/Users/akira/.rake/baz.rake"}
親ディレクトリにあるRakefileではなく、グローバルRakefileがある~/.rake以下のRakefile(ここではbaz.rake)が読み込まれている。
このとき、カレントディレクトリは変更されず、グローバルRakefileがある~/.rakeにはならない。