2010-09-20 59 views
41

比方說,我有一個Rake文件是這樣的:如何在ruby rake中顯式地失敗任務?

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消息,即使外部工具無法生成文件。什麼是正確的方式來通知耙,'file1'任務失敗,它應該中止(希望提出一個有意義的消息 - 就像哪個任務失敗) - 我現在能想到的唯一想法是提出一個例外,但那只是看起來不正確。

P.S該工具始終返回0作爲退出代碼。

回答

54

使用raisefail方法與其他任何Ruby腳本一樣(failraise的別名)。此方法將字符串或異常作爲參數用作腳本終止時顯示的錯誤消息。這也會導致腳本將值1返回給調用shell。它被記錄在here和其他地方。

+4

['fail'](http://ruby-doc.org/core-2.0/Kernel.html#method-i-fail)只是['raise']的別名(http:// ruby​​- doc.org/core-2.0/Kernel.html#method-i-raise) – Stefan 2013-07-23 21:18:50

+0

你是對的。更新我的答案以表明這一點。 – 2013-07-28 04:42:05

+0

鏈接已損壞。 – 2014-09-13 18:33:10

11

您可以使用abort("message")正常失敗耙測任務。

它將打印message到stdout和退出與代碼1

退出代碼1是在類Unix系統的故障。詳細請參照Kernel#abort