Если нужно создать ActiveJob, а блок выполнения принимает аргумент, который, как ожидается, будет единственным экземпляром объекта ActiveRecord, тогда, когда задание находится в очереди, этот объект существует, но при фактическом времени выполнения этого объекта нет дольше существует, работа, очевидно, потерпит неудачу, не так ли?Что происходит, когда вы передаете объект в очередь ActiveJob и этот объект больше не существует во время выполнения?
MyJob < ActiveJob::Base
def perform(widget)
# do some stuff to widget
end
end
Так как только эту работу, которая не потому, что ActiveJob не может создать экземпляр исходного объекта ActiveRecord, он будет держать неудачу. Какое обновление может быть выполнено для задания, чтобы остановить цикл сбоя. Я считал, что подключен к before_perform
, но я еще не видел пути.
Вне решения проблемы, я узнал здесь, что было бы лучше передать целое число widget_id
, а не объект ActiveRecord. Тогда я мог бы проверить и посмотреть, существует ли видимый виджет внутри блока выполнения.
Упоминается здесь: https://github.com/rails/rails/issues/19793 – Shadwell