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

how do you clear jobs from ActiveJob queue?

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

在我的工作中class:

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) 好像什么都没做。

您的作业失败后不再排队,它正在重试集中等待稍后重新排队。你想要 Sidekiq::RetrySet.new.clear.

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

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