Отложенное задание иногда не сохраняет запись

#ruby-on-rails #delayed-job

#ruby-on-rails #отложенное задание

Вопрос:

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

Иногда (кажется, когда определенная строка привязана к полю промо-кода, но это может быть просто совпадением) задание обрабатывает и отправляет электронное письмо, но не сохраняет запись и не помечает ее как завершенную. Я использовал IRB для установки записи в соответствии с кодом и проверил, что запись действительна.

Есть идеи, почему это может происходить, или кто-нибудь видел, как это происходит?

 class PaymentEmailAndLock < Struct.new(:blank)
    include Delayed::RecurringJob
    run_at '8:00pm'
    run_every 1.day
    timezone 'US/Eastern'
    queue 'dailyjobs'
    def perform
        time_set = 30.hours.ago..2.hours.ago
        @mail_and_lock = Cart.where(updated_at:time_set,payment_sent:true,complete_order_lock:false)
        @mail_and_lock.each do |obj|
            obj.complete_order_lock = true
            obj.survey_available = true
            obj.save
            if obj.payment == 1
                MessageMailer.delay(queue: 'mailers').message_payment_paper(obj.cust_email,obj)
            else
                MessageMailer.delay(queue: 'mailers').message_payment_digital(obj.cust_email,obj)
            end
        end
    end
end
  

Комментарии:

1. Ошибок нет. Запись действительна. Этим методом могут быть обработаны две записи, и одна будет обновлена, а другая просто отправит электронное письмо.

2. Перезапуск одного из моих рабочих исправил эту проблему. Я думаю, что рабочий запускал какой-то более старый экземпляр кода и некоторое время не был сброшен. Глупый лох, но, тем не менее, усугублял ситуацию. @muistoosh, пожалуйста, отправьте это в качестве ответа, и я отдам вам должное.