我有一个周期性的延迟作业,该延迟的作业会发送一封确认电子邮件,并将订单标记为已完成,以便下次延迟作业运行该订单时,将不会对其进行重新处理。
有时(似乎是某个字符串绑定到促销代码字段,但这可能只是巧合),作业处理并发送电子邮件,但不保存记录并将其标记为已完成。我已使用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