J'ai un delayed_job conçu pour envoyer un email en utilisant un mailer.Comment enregistrer un objet uniquement après la fin d'un job retardé?
À la fin, je dois enregistrer que le courriel a été envoyé - je fais ceci en sauvant le ContactEmail nouvellement créé.
En ce moment, les nouveaux enregistrements de CONTACTEMAIL est enregistré même si le delayed_job échoue.
Comment puis-je corriger cela pour que la nouvelle ContactEmail n'est enregistrée lorsque le logiciel de messagerie est envoyé avec succès?
Voici l'extrait de la tâche cron qui appelle la 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
Voici le some_mail_job.rb
class SomeMailJob < Struct.new(:contact, :contact_email)
def perform
OutboundMailer.deliver_campaign_email(contact,contact_email)
end
end
Et voici le 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
donc l'enregistrer avant d'exécuter le delayed_job (il doit être un delayed_job je le suis en cours d'exécution en heroku) --- L'instance est-elle persistante dans le travail retardé? – Angela
Je ne savais pas que vous êtes lié à delayed_job par heroku. Comme vous avez déjà une colonne d'état, mettez juste à jour l'état dans le travail ou sauvegardez le nouvel enregistrement dans le travail au lieu de la tâche cron. – gertas