[RUBY] Utilisez délivrer_now lorsque vous ignorez le courrier de la tâche d'application

Comme le titre l'indique, mais j'y suis un peu accro, alors prenez note

Je voulais ignorer le courrier lorsque l'exécution du travail était terminée, je l'ai donc implémenté comme suit

XxxxJob.rb


Mailer.send_mail(user).deliver_later

Alors, vérifiez légèrement le fonctionnement ... Confirmez qu'il est mis en file d'attente dans le journal, J'ai couru ce qui précède sur la console des rails et l'ai vu sur letter_opener

Quand je le mets dans l'environnement de vérification, le courrier ne vole pas ...

Je ne pouvais pas le comprendre même si je déboguais diverses choses, et je ne pouvais pas le trouver en particulier même lorsque je cherchais sur le net.

En général, les files d'attente asynchrones (comme l'envoi de courrier avec .deliver_later) ne fonctionnent pas lorsqu'elles sont écrites dans une tâche Rake. Cela est dû au fait que lorsque Rake se termine, .deliver_later peut supprimer le pool de threads en cours avant de terminer le traitement du courrier. Pour contourner ce problème, utilisez .deliver_now ou exécutez une file d'attente persistante dans l'environnement de développement.

https://railsguides.jp/active_job_basics.html#action-mailer

Il a été écrit au maximum Quand je l'ai réglé sur delivery_now, le courrier a volé sans incident

XxxxJob.rb


Mailer.send_mail(user).deliver_now

Au fait, j'ai choisi livrer_later car le processus existant est comme ça, et il vaut mieux être asynchrone. Donc, utilisez delivery_now lorsque vous ignorez le courrier du travail

Recommended Posts

Utilisez délivrer_now lorsque vous ignorez le courrier de la tâche d'application