【问题标题】:How to explicitly fail a task in ruby rake?如何在 ruby​​ rake 中明确地失败任务?
【发布时间】:2011-04-14 19:01:26
【问题描述】:

假设我有一个像这样的 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 rake


    【解决方案1】:

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

    【讨论】:

    • fail 只是 raise 的别名
    • 没错。更新了我的答案以表明这一点。
    • @Dan Tenenbaum:谢谢。替换为工作链接。
    • 虽然与abort类似,但在这种情况下,后者似乎更合适。 fail 显示堆栈跟踪(不是用户友好的输出)。并引发RuntimeError,这暗示您可能想抓住它(因为rescue 默认为StandardError 和后代,RuntimeError 属于,而SystemExit 不属于)。
    【解决方案2】:

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

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

    退出代码 1 是类 Unix 系统中的故障。

    详情请见Kernel#abort

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2020-11-18
      • 2017-04-14
      相关资源
      最近更新 更多