Ruby on rails 延迟的作业处理作业后的回调
我需要在Ruby on rails 延迟的作业处理作业后的回调,ruby-on-rails,ruby,ruby-on-rails-plugins,delayed-job,Ruby On Rails,Ruby,Ruby On Rails Plugins,Delayed Job,我需要在delayed_job处理模型上的任务后更新模型,例如: foo.delay.something 在完成某件事之后,我需要更新foo对象,实现这一点的最佳方法是什么?我想在Delayed::Backend::ActiveRecord::Job类上编写一个回调函数,但是应该有更干净更好的方法来实现这一点 我不明白你为什么不把它作为已经作用在对象上的作业的一部分来做。我会在#foo方法的末尾更新它: def foo # do work here update_attribute :p
delayed_job
处理模型上的任务后更新模型,例如:
foo.delay.something
在
完成某件事之后,我需要更新foo对象,实现这一点的最佳方法是什么?我想在Delayed::Backend::ActiveRecord::Job
类上编写一个回调函数,但是应该有更干净更好的方法来实现这一点 我不明白你为什么不把它作为已经作用在对象上的作业的一部分来做。我会在#foo方法的末尾更新它:
def foo
# do work here
update_attribute :processed, true
end
按照建议更新记录是可以的,但这只是解决方案的一部分
如果我想更多地控制失败时该怎么办,回调会有所帮助。。i、 e:
Delayed::Job.enqueue InstructionRequestJob.new( p1, p2 )
InstructionRequestJob perform
- perform a task on a remote server
- get a response
- case response
when OK
update attribute ( as suggested)
else
# how many attempts ?
if too_many_attempts
update attribute
destroy the job
else
reschedule the job for another attempt
- end
是的,我可以延迟整个流程,但我想知道如何在处理完回调后触发。我也有类似的情况,但在我的情况下,只需在第一个作业结束时将另一个作业排队即可。另外,需要注意的是,创建的作业本身就是ActiveRecord对象,因此如果您想在那里添加生命周期回调,您可以这样做。嘿,谢谢,就我个人而言,对于这个特定的案例,我更喜欢将回调添加到作业实例中,而不是将一个作业一个接一个地排队,因此,我将对作业实例进行回调:)