如何从 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 页面以了解更多信息。
我有一个执行状态更改的工作,而我使用它的方式是,状态仅在经过一定时间后才会更改。
在我的工作中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 页面以了解更多信息。