2013-04-26 128 views
9

我需要覆蓋Delayed::Worker.max_attempts以執行一個特定的作業,我想多次重試該作業。另外,我不希望下一個預定時間以指數形式確定(來自文檔:5秒+ N ** 4,其中N是重試次數)。延遲作業:爲特定作業配置run_at和max_attempts

我不想覆蓋Delayed::Worker設置,並影響其他工作。

我的工作已經是一項自定義工作(我以某種方式處理錯誤),所以這可能會有幫助。如何做到這一點的任何指針?

回答

15

我通過查看delayed_job源代碼找出它。這在文檔的任何地方都沒有記錄。

這裏就是我所做的:

class MyCustomJob < Struct.new(:param1, :param2) 
    def perform 
    # do something 
    end 

    # attempts and time params are required by delayed_job 
    def reschedule_at(time, attempts) 
    30.seconds.from_now 
    end 

    def max_attempts 
    50 
    end 
end 

希望這可以幫助別人的未來。在```reschedule_at```

+1

參數應該進行切換:更新https://github.com/collectiveidea/delayed_job/blob/95deddc99af84e652dd865a292e959db4b0a1179/lib/delayed/backend/base.rb#L133 – sufleR 2014-04-18 10:21:22

+0

。謝謝@ sufleR! – gylaz 2014-04-18 16:28:48

+0

我有一個疑問,我們如何檢查執行任務的嘗試實際上是否失敗? – gates 2016-11-09 10:58:13