Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 延迟的作业处理作业后的回调_Ruby On Rails_Ruby_Ruby On Rails Plugins_Delayed Job - Fatal编程技术网

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对象,因此如果您想在那里添加生命周期回调,您可以这样做。嘿,谢谢,就我个人而言,对于这个特定的案例,我更喜欢将回调添加到作业实例中,而不是将一个作业一个接一个地排队,因此,我将对作业实例进行回调:)