我的生产应用程序在AWS
上运行,但在某些邮件程序中遇到活动作业问题 - deliver_later
。我正在成功发送所有正在开发deliver_later
的电子邮件,但生产中有一些不同之处。某些邮件程序使用deliver_later
但不是我的欢迎邮件程序(欢迎新用户)。所以我必须在这个欢迎邮件上设置deliver_now
,让它实际发送电子邮件。
//doesn't work, email is not sent
UserMailer.welcome_email(self).deliver_later
//works
UserMailer.welcome_email(self).deliver_now
当我使用deliver_later
:
[ActiveJob]排队ActionMailer :: DeliveryJob(职位编号: d7114-464e-4a90-9721-126650)带参数的Async(邮件程序): “UserMailer”,“welcome_email”,“deliver_now”,#>
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
您需要使用一些异步后端,例如sidekiq
,delayed_job
或其他。
答案 1 :(得分:1)
deliver_now
一次发送一封电子邮件。
如果你使用deliver_later
,你必须使用像Sidekiq
这样的ActiveJob赛跑者,你可以看到这个gist Sending emails with ActionMailer and Sidekiq
也会看到发送的基本Sidekiq
电子邮件。
将通过活动作业发送的电子邮件排入队列。作业运行时,它将使用deliver_now
发送电子邮件。
UserMailer.welcome_email(self).deliver_later(wait: 1.hour)
基本上,deliver_later
是异步的。使用此方法时,此时不会发送电子邮件,而是将其推送到作业的队列中。如果作业未运行,则不会发送电子邮件。无论工作状态如何,deliver_now
都会立即发送电子邮件。 Here您可以看到交付方式的文档。
答案 2 :(得分:0)
这是因为您没有设置时间和轨道获取默认时间。并且在日志文件中还显示尚未调用deliver_later方法。
尝试使用:
UserMailer.welcome_email(self).deliver_later(wait: 1.minute)
然后在一分钟后检查日志。
答案 3 :(得分:0)
如果您使用的是delay_job,则必须运行rake jobs:work