2013-04-26 15 views
9

Bir çok kez yeniden denemek istediğim belirli bir iş için Delayed::Worker.max_attempts'un üzerine yazmam gerekiyor. Ayrıca, bir sonraki programlanan zamanın üssel olarak belirlenmesini istemiyorum (Dokümanlardan: 5 saniye + N ** 4, burada N, yeniden deneme sayısıdır).Gecikmeli İş: Belirli bir iş için run_at ve max_attempts yapılandırın

Delayed::Worker ayarlarının üzerine yazmak ve diğer işleri etkilemek istemiyorum.

İşim zaten özel bir iştir (hataları belirli bir şekilde ele alıyorum), bu yardımcı olabilir. Bunu nasıl yapacağınıza dair bir işaret var mı?

cevap

15

delayed_job kaynak koduna bakarak anladım. Bu, dokümanlarında herhangi bir yerde belgelenmez.

İşte ne yaptım:

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 

Umut bu gelecekte birisi yardımcı olur. `Reschedule_at``` içinde

+1

argümanlar anahtarlamalı: https://github.com/collectiveidea/delayed_job/blob/95deddc99af84e652dd865a292e959db4b0a1179/lib/delayed/backend/base.rb#L133 – sufleR

+0

güncellendi. Teşekkürler @sufleR! – gylaz

+0

Bir şüphem var, bir görevi gerçekleştirme girişiminin gerçekten başarısız olup olmadığını nasıl kontrol ederiz? – gates

İlgili konular