2012-12-21 24 views
0

我使用delayed_job的執行系統調用。這個系統調用調用一個Groovy腳本。的delayed_job - 裝卸作業返回值

class Job 
    def perform 
     command "groovy file.groovy" 
     system command 
    end 

    def success(job) 
     # handle success 
    end 

    def error(job, exception) 
     # handle error, exception 
    end 
end 

這是一切都很完美,但我總是回到「成功」的狀態,因爲我的groovy總是正確退出。我目前正在將RuntimeExeptions投入到Groovy腳本中以挑起失敗的工作。當我打電話system "groovy progra.groovy",它拋出一個異常(Groovy的程序提出了一個例外),system調用的返回值,如預期false。但通過的delayed_job做同樣的時候,它從來沒有訪問def error方法,但該方法def success

你對delayed_job的實際上是如何控制perform方法的返回任何意見?它何時進入errorfailure掛鉤。不幸的是,我沒有在文檔中找到關於此主題的任何內容。

在此先感謝

回答

3

你有沒有嘗試過這樣的事情:

def perform 
    command = "groovy file.groovy" 
    system command || raise "Error executing command : #{command}" 
end 

我敢肯定的delayed_job包裝在救援塊進行呼叫和基於它捕獲任何異常調用成功或錯誤。

+0

不幸的是,該系統命令不會引發任何異常。即使退出代碼是1+ ... – pabera

+0

這正是我建議您添加「||」的原因。在system()調用之後引發「執行命令時出錯:#{command}」'。 你也可以檢查結果是否爲零,並在這種情況下引發異常,如「command#{command} failed(reason:$?)」,我的第一個命題只是檢查「falsy」值 – systho

+0

與[這](http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby),我得到了我的錯誤處理運行。萬分感謝。 – pabera