işi oluştururken
Bununla başa olmalıdır:
priority = 0
run_time = my_object.start_time
Delayed::Job.enqueue(MyCustomJob.new(my_object), priority, run_time)
https://github.com/tobi/delayed_job/wiki
işlerinizi beklenen anda çalışan değilseniz, sen UTC için zamanlama olabilir :
http://www.gregbenedict.com/2009/08/19/is-delayed-job-run_at-datetime-giving-you-fits/
varolan j için kuyruğunu kontrol etmek ob - Aşağıdaki yapabilirdi:
class MyCustomJob < Struct.new(:object_id)
def self.exists?(object_id)
Delayed::Job.where(['handler = ? and failed_at is null',handler(object_id)]).count(:all) > 0
end
def self.handler(object_id)
"--- !ruby/struct:MyCustomJob \nobject_id: #{object_id}\n"
end
def perform
my_object = MyObject.find(object_id)
my_object.do_stuff
end
end
Sonra sadece kuyruk önce
MyCustomJob.exists?(my_object.id)
kontrol edin.
Biraz kesmek - gerektiği gibi handler
yöntemini düzenleyin. Delayed_jobs tablosunu, iş tablonuz büyükse veya diğer iş türleri ile yaparsanız daha temiz tablo ve daha verimli tablo taraması yapmak için bir class/object_id değerine sahip olacak şekilde değiştiririm.
Bu soru aynı zamanda ilgili görünüyor:
How to cancel scheduled job with delayed_job in Rails?
yapmak ** ** ** ** ** yönteminin içinde ** Gecikmeli :: İş ** AR nesnesini almak ister misiniz? – Anatoly
tam olarak! nesnenin start_time değerinin değişip değişmediğini kontrol etmem gerekiyor. – Oliver