Ruby
Rails
rake

依存関係にあるrakeタスクをキャンセルする方法

More than 1 year has passed since last update.

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 

方法

abortexit を使う
raisereturnnext では、 hoge タスク自体は中断されるが、 hoge に依存している fuga タスクが実行されてしまう。

task :hoge do
  if some_check
    abort 'なんかエラーがおきました'
  end
  puts 'hoge'
end