2016-04-25 11 views

Antwort

1

Nach einigen Tests scheint es, dass Sie benutzerdefinierte bezogen auf den jeweiligen Job Fehlermeldung mit folgendem Ansatz Umschuldung tun können:

  1. eine Instanzvariable in den Job definieren die benutzerdefinierte Wiederholungsverzögerung zu halten. Diese Variable wird von allen anderen Variablen in die Datenbank (oder jedes andere DelayedJob-Backend) serialisiert, d. H. Ihr Status wird zwischen Jobläufen beibehalten.

  2. Im error Haken, die Verzögerung auf einen beliebigen Wert auf der Grundlage des Fehlers, die Sie im exception Parameter bekommen (das ein Exception Objekt).

  3. Verwenden Sie diese benutzerdefinierte Verzögerung in der reschedule_at Methode.

Die Lösung nutzt die Tatsache, dass die Methode reschedule_atis called after the error hook. Siehe das folgende Beispiel:

class MyJob 

    attr_accessor :retry_delay 

    def initialize 
    self.retry_delay = 5 # default retry delay 
    end 

    def error(job, exception) 
    # set up a different the delay time on a specific error 
    if exception.is_a? NameError 
     self.retry_delay = 10 
    end 
    end 

    def reschedule_at(current_time, attempts) 
    current_time + retry_delay.seconds 
    end 

end