假设我有一个像这样的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作为退出代码。
答案 0 :(得分:58)
使用raise
或fail
方法,就像使用任何其他Ruby脚本一样(fail
是raise
的别名)。此方法将字符串或异常作为参数,该参数用作脚本终止时显示的错误消息。这也将导致脚本将值1返回给调用shell。它记录在here和其他地方。
答案 1 :(得分:16)
您可以使用abort("message")
优雅地使rake任务失败。
它会将message
打印到stdout并使用代码1退出。
退出代码1是类Unix系统中的失败。
有关详细信息,请参阅Kernel#abort。