私がこのようなrakefileを持っているとしましょう:
file 'file1' => some_dependencies do
sh 'external tool I do not have control over, which sometimes fail to create the file'
???
end
task :default => 'file1' do
puts "everything's OK"
end
ここで、???の代わりに何も指定しないと、外部ツールがファイルの生成に失敗しても、OKメッセージが表示されます。 rakeに通知する適切な方法は何ですか、「file1」タスクは失敗し、中止する必要があります(うまくいけば、どのタスクが失敗したかなどの意味のあるメッセージが表示されます)。ただ正しくないようです。
P.Sツールは常に終了コードとして0を返します。
他のRubyスクリプト(raise
はfail
のエイリアスです)の場合と同様に、fail
またはraise
メソッドを使用します)。このメソッドは、スクリプトの終了時に表示されるエラーメッセージとして使用される引数として文字列または例外を受け取ります。これにより、スクリプトは呼び出し元のシェルに値1を返します。ドキュメントに記載されています here およびその他の場所。
abort("message")
を使用して、rakeタスクを正常に失敗させることができます。
message
をstdoutに出力し、コード1で終了します。
終了コード1は、Unixライクなシステムでの失敗です。
詳細は Kernel#abort を参照してください。