Rakeタスクを追加するとき、同じ名前でタスクを追加してしまうと、タスクが2つ存在することになりうまく動かないことがあります。
namespace :hoge do
desc "print bar"
task :task do
p "bar"
end
end
このようなtaskが定義されているとします。
namespace :hoge do
desc "print bar"
task :task do
p "bar"
end
end
namespace :hoge do
desc "print foo"
task :task do
p "foo"
end
end
この状態でrake -T
を行うと、
$ rake -T
rake hoge:task # print bar / print foo
となり、2つタスクが定義されているようになってしまいます。
これを解消するには、 clear
を使ってtaskを消してから再定義する必要があいrます。
namespace :hoge do
desc "print bar"
task :task do
p "bar"
end
end
Rake::Task["hoge:task"].clear
namespace :hoge do
desc "print foo"
task :task do
p "foo"
end
end
$ rake -T
rake hoge:task # print foo
これで新しく定義したtaskが動くようになります。
capistranoの内容を上書きする際にも使えます。