जब आप काम बनाने के इस संभाल चाहिए:
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
अपनी नौकरी की उम्मीद समय में नहीं चल रहे हैं, तो आप उन्हें यूटीसी के लिए समय निर्धारण किया जा सकता है :
http://www.gregbenedict.com/2009/08/19/is-delayed-job-run_at-datetime-giving-you-fits/
एक मौजूदा जे के लिए कतार जाँच करने के लिए ओब - आप निम्न कर सकता है:
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
तो बस कतार से पहले MyCustomJob.exists?(my_object.id)
लिए जाँच करें।
यह एक हैक का थोड़ा सा है - आवश्यकतानुसार handler
विधि संपादित करें। मैं विलंब_jobs तालिका को क्लीनर कोड बनाने के लिए कक्षा/object_id रखने के लिए संशोधित करता हूं और यदि आपकी नौकरियां तालिका बड़ी है या आप अन्य प्रकार की नौकरियों के साथ ऐसा करते हैं तो अधिक कुशल टेबल स्कैन करें।
यह सवाल भी प्रासंगिक लग रहा है:
How to cancel scheduled job with delayed_job in Rails?
करना आप ** विलम्बित :: नौकरी ** एआर ऑब्जेक्ट ** ** ** प्रदर्शन के अंदर प्राप्त करना चाहते हैं? – Anatoly
बिल्कुल! मुझे यह जांचने की ज़रूरत है कि वस्तु का start_time बदल गया है या नहीं। – Oliver