#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, пожалуйста, отправьте это в качестве ответа, и я отдам вам должное.