我有一個delayed_job旨在使用郵件發送電子郵件。只有在delayed_job成功完成後,我如何才能保存對象?
完成後,我需要記錄電子郵件已發送 - 我通過保存新創建的ContactEmail來完成此操作。
現在,即使delayed_job失敗,新的ContactEmail記錄也會被保存。
我該如何解決這個問題,以便只有在郵件發送成功後才保存新的ContactEmail?
下面是它調用的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
這裏是outbound_mailer:
class OutboundMailer < Postage::Mailer
def campaign_email(contact,email)
subject email.subject
recipients contact.email
from '<[email protected]>'
sent_on Date.today
body :email => email
end
所以保存它,它運行的delayed_job之前(它是我在Heroku上運行它的delayed_job) ---延遲作業中的實例是否持久? – Angela 2010-09-17 14:40:15
我不知道你是由heroku綁定到delayed_job。因爲你已經有狀態欄只是更新作業中的狀態,或者將它保存在作業中而不是cron任務中。 – gertas 2010-09-17 21:34:04