Обратный вызов после задания процесса delayed_job - PullRequest
5 голосов
/ 16 июля 2010

Мне нужно обновить модель после того, как delayed_job обработает на ней задачу, например:

foo.delay.something

После того, как something сделано, мне нужно обновить объект fooКаков наилучший способ достичь этого?Я думал о кодировании обратного вызова в классе Delayed::Backend::ActiveRecord::Job, но должно быть что-то чище и лучше сделать это.

Ответы [ 3 ]

3 голосов
/ 16 июля 2010

Я бы просто обновил его в конце метода #foo:

def foo
  # do work here
  update_attribute :processed, true
end
1 голос
/ 16 июля 2010

Я не понимаю, почему вы не сделаете это как часть работы, которая уже действует на объект.

0 голосов
/ 20 мая 2011

обновление записи в соответствии с предложением - это нормально, но это только часть решения ...

обратный вызов поможет, если я хочу больше контроля над тем, что делать, если он не работает .. т.е.:

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
...