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
にはならない。