ruby-on-rails - 如果 ActiveJob 应该执行的对象被删除,我如何才能阻止它执行?

标签 ruby-on-rails rails-activejob

我有一个后台作业,可以对上传的图片做一些处理,但有时用户会在后台作业执行之前删除图片,并创建一个 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/

相关文章:

ruby-on-rails - Rails 项目的 Google 站点地图文件

html - Ruby on Rails/HTML - 内联表单 :checked => false is not working

ruby-on-rails - 使用延迟作业在后台处理方法

ruby-on-rails - 如何在 ActiveJob 作业中使用 url_for/polymorphic_url?

ruby-on-rails - 为什么carrierwave会导致NameError: uninitialized constant Micropost::PictureUploader错误?

ruby-on-rails - ruby on Rails - 具有复杂逻辑的模型集合排序

ruby-on-rails - 在 View Rails 中计数

ruby-on-rails - Sidekiq 日志显示 JobWrapper 而不是作业类名称

ruby-on-rails - 如何在 Rails 中每隔几秒运行一些 Action 10 分钟?

ruby-on-rails-5 - Cucumber - 立即执行 ActiveJob `perform_later` 作业