У меня есть подозрение, что некоторые наши активные рабочие места исчезают, но я не знаю почему. Ниже я нашел доказательства исчезновения, но не причина.Что может привести к исчезновению запланированных Rails Active Jobs?
Наш сайт использует внешнюю службу облачной печати. Мы снимаем задания, а затем проверяем их статус. После успешного создания удаленной облачной печати мы создаем активное задание для немедленного проверки состояния. Если он закончен (успешно или иначе), он помечается как таковой. Если нет, то задание статуса проверки создает другое, с небольшой задержкой. Задержка увеличивается каждый раз.
Одна проверка состояния сегодня, журналы показывают, что ожидание достигло 128 секунд. Но следующая проверка статуса не произошла, и ошибок в журнале тоже нет.
Мы используем активную работу, поддерживаемую отложенной работой. Код для задания проверки состояния приведен ниже. Он не видит недостатков в логике, которые не приведут ни к правильной проверке статуса, ни к другой попытке с ожиданием.
class CheckCloudPrintStatusJob < ApplicationJob
queue_as :default
def perform(cloud_print, count = 0)
cloud_print.update_status
unless cloud_print.finished?
count += 1
wait = 2**(count-1)
if count > 15
cloud_print.mark_as_failed
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "~~~~~~~~~~~~~~~~~~ Cloud printing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "Cloud print ##{cloud_print.id} failed"
puts "Finally waited #{wait} seconds and then cancelled."
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
else
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "~~~~~~~~~~~~~~~~~~ Cloud printing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "Checking status of cloud print ##{cloud_print.id}"
puts "Waiting #{wait} seconds and then retrying."
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
CheckCloudPrintStatusJob.set(wait: wait.seconds).perform_later(cloud_print, count)
end
end
end
end
, что происходит, когда 'update_status' выдает ошибку? можете ли вы также использовать код в 'update_status'? –