我有一个后台作业,可以对上传的图片做一些处理,但有时用户会在后台作业执行之前删除图片,并创建一个 ActiveJob::DeserializationError
我可以在 before_destroy
的模型中做些什么来取消作业吗?或者在作业类中我可以在 before_perform
中做些什么,以便在数据库中的记录已被删除时不执行作业?
谢谢!
最佳答案
事件作业实例包括 ActiveSupport::Rescuable
,这意味着您可以使用 rescue_from
以与在 Controller 中相同的方式在工作中。
然后您可以从任何反序列化错误中恢复:
class MyJob < ApplicationJob
rescue_from(ActiveJob::DeserializationError) do |e|
true
end
end
如果你想在很多工作中使用这个模式,你可以将它提取到一个模块中:
module DeserializationErrorIsOkay
extend ActiveSupport::Concern
included do
rescue_from(ActiveJob::DeserializationError) do |e|
# This error is okay and doesn't indicate a failed job
true
end
end
end
您可以将其包含在您的工作中:
class MyJob < ApplicationJob
include DeserializationErrorIsOkay
end
注意:这将从作业中序列化的任何对象中恢复,但无法反序列化
关于ruby-on-rails - 如果 ActiveJob 应该执行的对象被删除,我如何才能阻止它执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820828/