당신이 작업 만들 때
이 처리해야합니다 :
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
당신의 작업이 예상 시간에 실행하지 않는 경우, 당신은 UTC 그들을 예약 될 수있다 :
http://www.gregbenedict.com/2009/08/19/is-delayed-job-run_at-datetime-giving-you-fits/
기존 J에 대한 대기열을 확인하려면 산부인과 - 다음을 수행 할 수 있습니다 :
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
방법을 수정하십시오. delayed_jobs 테이블을 수정하여 작업 테이블이 크거나 다른 유형의 작업에서이 작업을 수행하는 경우 더 깨끗한 코드와 더 효율적인 테이블 스캔을위한 클래스/object_id를 만들 수 있습니다.
는
이 질문은 관련 같습니다
How to cancel scheduled job with delayed_job in Rails?
을 수행합니다 ** 지연 ** :: 작업 ** AR 개체를 ** 수행 ** 방법 안에 넣고 싶습니까? – Anatoly
정확히! 개체의 start_time이 변경되었는지 확인해야합니다. – Oliver