如何从ActiveJob队列中清除作业?

时间:2018-12-07 23:38:07

标签: ruby-on-rails sidekiq rails-activejob

我有一份执行状态更改的工作,而我的使用方式是,仅在经过一定时间后才更改状态。

在我的工作班级:

class ItemJob < ApplicationJob
 queue_as :default

 def perform(item)
  item.do_this!
 end
end

正在从模型中调用它:

def create_item_worker
 ItemJob.set(wait: 30.seconds).perform_later(self)
end

但是,这不起作用,因为ActiveJob的队列中有不再存在的记录。我在终端机中输入bundle exec sidekiq,它像ActiveJob::DeserializationError: Error while trying to deserialize arguments: Couldn't find Item with 'id'=67一样吐出废话。

那么我该如何清除呢? Sidekiq::Queue.all.each(&:clear)似乎什么都没做。

1 个答案:

答案 0 :(得分:3)

您的作业由于失败而不再入队,它正在等待重试设置,以便稍后重新入队。您需要Sidekiq::RetrySet.new.clear

请阅读API和错误处理Wiki页面以了解更多信息。

https://github.com/mperham/sidekiq/wiki/API