Допустим, у нас есть 100 объектов для отправки в Sidekiq для обработки некоторых данных.Записывается рейк, который запускается каждые 24 часа и выбирает все 100 объектов, для которых столбец sidekiq_processed объекта равен false, и отправляет его в очередь Sidekiq для обработки.После того, как Sidekiq обработал данные, столбец sidekiq_processed объекта обновляется как истинный, так что в следующий раз, когда запланирован рейк, этот объект не будет подхвачен.
Проблема, с которой я сталкиваюсь, состоит в том, что некоторые объекты, скажем, еще 20 дней спустяиметь sidekiq_processed как false.Я также реализовал ведение журнала внутри функции выполнения, чтобы отмечать каждое событие / состояние, в котором находятся мои объекты.
Допустим, осталось 20 объектов, которые не были обработаны.Их журналы были проверены, и журналы этих объектов не были найдены.После запуска new.perform на 21-й день все объекты были окончательно обработаны.
Я не хочу запускать их вручную, есть способ проверить, почему Sidekiq не использовал мои объекты очереди.
task :process_some_objects => :environment do
Object.where(sidekiq_processed: false).each do |object|
Worker.perform_async(object.id)
end
end