delayed_job
モデルのタスクを処理した後、モデルを更新する必要があります。例:
foo.delay.something
完了しsomething
たら、fooオブジェクトを更新する必要があります。これを実現するための最良の方法は何ですか?クラスでコールバックをコーディングすることを考えていましたDelayed::Backend::ActiveRecord::Job
が、これを行うにはもっとクリーンでより良いものがあるはずです。
delayed_job
モデルのタスクを処理した後、モデルを更新する必要があります。例:
foo.delay.something
完了しsomething
たら、fooオブジェクトを更新する必要があります。これを実現するための最良の方法は何ですか?クラスでコールバックをコーディングすることを考えていましたDelayed::Backend::ActiveRecord::Job
が、これを行うにはもっとクリーンでより良いものがあるはずです。
#fooメソッドの最後で更新します。
def foo
# do work here
update_attribute :processed, true
end
すでにオブジェクトに作用している仕事の一部としてあなたがそれをしない理由がわかりません。
提案されたようにレコードを更新することは問題ありませんが、それは解決策の一部にすぎません...
コールバックは、失敗した場合の対処方法をさらに制御したい場合に役立ちます。
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