2013-04-26 9 views
9

Devo sovrascrivere lo Delayed::Worker.max_attempts per un lavoro specifico, che desidero riprovare molte volte. Inoltre, non voglio che il prossimo orario pianificato venga determinato in modo esponenziale (dai documenti: 5 secondi + N ** 4, dove N è il numero di tentativi).Lavoro ritardato: configurare run_at e max_attempts per un lavoro specifico

Non voglio sovrascrivere le impostazioni Delayed::Worker e influire su altri lavori.

Il mio lavoro è già un lavoro personalizzato (gestisco gli errori in un certo modo), quindi potrebbe essere utile. Qualche suggerimento su come farlo?

risposta

15

L'ho scoperto esaminando il codice sorgente delayed_job. Questo non è documentato da nessuna parte nei loro documenti.

Ecco quello che ho fatto:

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 

Spero che questo aiuti qualcuno in futuro.

+1

argomenti a '' 'reschedule_at''' devono passare: https://github.com/collectiveidea/delayed_job/blob/95deddc99af84e652dd865a292e959db4b0a1179/lib/delayed/backend/base.rb#L133 – sufleR

+0

aggiornamento. Grazie a @sufleR! – gylaz

+0

Ho un dubbio, come verifichiamo se un tentativo di eseguire un compito stia effettivamente fallendo? – gates

Problemi correlati