У меня есть delayed_job, предназначенный для отправки электронной почты с использованием почтовой программы.
После завершения мне нужно записать, что электронное письмо было отправлено - я делаю это, сохраняя только что созданную ContactEmail.
Прямо сейчас новые записи ContactEmail сохраняются даже в случае сбоя delayed_job.
Как мне исправить это так, чтобы новая ContactEmail сохранялась только после успешной отправки почтовой программы?
Вот фрагмент из задачи cron, который вызывает delayed_job:
puts contact_email.subject
contact_email.date_sent = Date.today
contact_email.date_created = Date.today
contact_email.body = email.substituted_message(contact, contact.colleagues)
contact_email.status = "sent"
#Delayed::Job.enqueue OutboundMailer.deliver_campaign_email(contact,contact_email)
Delayed::Job.enqueue SomeMailJob.new(contact,contact_email)
contact_email.save #now save the record
Вот some_mail_job.rb
class SomeMailJob < Struct.new(:contact, :contact_email)
def perform
OutboundMailer.deliver_campaign_email(contact,contact_email)
end
end
А вот исходящий_малер:
class OutboundMailer < Postage::Mailer
def campaign_email(contact,email)
subject email.subject
recipients contact.email
from '<me@me.com>'
sent_on Date.today
body :email => email
end