在delayed_job进程作业后回调

时间:2010-07-15 20:16:06

标签: ruby-on-rails ruby ruby-on-rails-plugins delayed-job

我需要在delayed_job处理任务后更新模型,例如:

foo.delay.something

something完成后,我需要更新foo对象,实现这个目标的最佳方法是什么?我正在考虑编写Delayed::Backend::ActiveRecord::Job类的回调编码,但应该有更清洁,更好的做法。

3 个答案:

答案 0 :(得分:3)

我会在#foo方法结束时更新它:

def foo
  # do work here
  update_attribute :processed, true
end

答案 1 :(得分:1)

我不明白为什么你不会把它作为已经作用于对象的工作的一部分。

答案 2 :(得分:0)

根据建议更新记录很好,但它只是解决方案的一部分...

如果我想要更好地控制失败时该怎么做,那么回调会有所帮助..即:

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