我的生产应用程序在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(作业ID:d7114-464e-4a90-9721-126650)到带有参数的Async(邮件程序):“UserMailer”,“welcome_email”,“deliver_now”,#>
任何帮助,将不胜感激。谢谢。
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你可以看到交付方法的文档。
你需要使用一些异步后端,如sidekiq
,delayed_job
或其他东西。
这是因为您没有设置时间和轨道获取默认时间。并且在日志文件中还显示尚未调用deliver_later方法。
尝试使用:
UserMailer.welcome_email(self).deliver_later(wait: 1.minute)
然后在一分钟后检查日志。
如果您使用delayed_job,则必须运行rake jobs:work