如何在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消息,即使外部工具无法生成文件。 什么是正确的方法来通知耙,'文件1'任务失败,它应该中止(希望提出一个有意义的消息,如哪个任务失败) – 我现在能想到的唯一想法是提出一个例外,但那只是看起来不正确。

PS该工具始终返回0作为退出代码。

像使用其他Ruby脚本一样使用raisefail方法( failraise的别名)。 该方法将一个string或exception作为参数,用作在脚本结束时显示的错误消息。 这也会导致脚本将值1返回给调用shell。 它在这里和其他地方记载。

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

它会将message打印到标准输出并用代码1退出。

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

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