2017-07-12更新
以下の内容は、特定の状況下でしか発生しない現象で、通常はrakeのタスク実行中に例外が発生すると以降のタスクはキャンセルされます。
なので、rakeタスク中の例外でキャンセルされない現象が発生している場合も、この記事で書いた修正方法は 参考にせず 、例外を握りつぶしているコードを特定して修正してください。ぼくのプロジェクトの場合は、依存しているgem内で例外が無視されるようになっていました。
内容
rakeタスク hoge に依存しているタスク fuga があるとします。
なんらかの条件でタスク fuga を実行せずにキャンセルする方法でちょっと迷ったのでまとめました。
問題
task :hoge do
if some_check
# ここで処理を中断。 `fuga` タスクも実行したくない
end
puts 'hoge'
end
task fuga: :hoge do
puts 'fuga'
end
方法
abort か exit を使う
raise や return や next では、 hoge タスク自体は中断されるが、 hoge に依存している fuga タスクが実行されてしまう。
task :hoge do
if some_check
abort 'なんかエラーがおきました'
end
puts 'hoge'
end