как вы очищаете задания из очереди ActiveJob? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть задание, которое выполняет изменение состояния, и, как я его использую, состояние изменяется только по прошествии определенного количества времени.

В моем классе задания:

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 голосов
/ 08 декабря 2018

Ваше задание больше не ставится в очередь, поскольку оно не выполнено, оно ожидает, пока в наборе повторных попыток не будет повторно поставлен в очередь позднее.Вы хотите Sidekiq::RetrySet.new.clear.

Пожалуйста, прочитайте страницы вики API и Обработка ошибок, чтобы узнать больше.

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

...