如何在ruby rake中明确地使任务失败?

时间:2010-09-20 16:48:01

标签: ruby rake

假设我有一个像这样的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作为退出代码。

2 个答案:

答案 0 :(得分:58)

使用raisefail方法,就像使用任何其他Ruby脚本一样(failraise的别名)。此方法将字符串或异常作为参数,该参数用作脚本终止时显示的错误消息。这也将导致脚本将值1返回给调用shell。它记录在here和其他地方。

答案 1 :(得分:16)

您可以使用abort("message")优雅地使rake任务失败。

它会将message打印到stdout并使用代码1退出。

退出代码1是类Unix系统中的失败。

有关详细信息,请参阅Kernel#abort