我有一份执行状态更改的工作,而我的使用方式是,仅在经过一定时间后才更改状态。
在我的工作班级:
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)
似乎什么都没做。
答案 0 :(得分:3)
您的作业由于失败而不再入队,它正在等待重试设置,以便稍后重新入队。您需要Sidekiq::RetrySet.new.clear
。
请阅读API和错误处理Wiki页面以了解更多信息。