如果要创建一个 ActiveJob 并且执行块接受一个预期为 ActiveRecord 对象的单个实例的参数,那么当作业入队时,有问题的对象存在,但在实际执行时该对象不再存在,这项工作显然会失败,对吧?
MyJob < ActiveJob::Base
def perform(widget)
# do some stuff to widget
end
end
因此,一旦这个作业因为 ActiveJob 无法实例化原始 ActiveRecord 对象而失败,它将继续失败。可以对作业进行哪些更新以停止故障循环。我考虑挂钩before_perform
,但我还没有看到前进的道路。
除了解决手头的问题之外,我在这里学到的另一件事是传递widget_id
整数而不是 ActiveRecord 对象会更好。然后我就可以检查并查看有问题的小部件是否仍然存在于执行块内。