Rails 在 AWS 上使用 deliver_later 的 Action Mailer
Rails Action Mailer with deliver_later on AWS
我在 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] Enqueued ActionMailer::DeliveryJob (Job ID:
d7114-464e-4a90-9721-126650) to Async(mailers) with arguments:
"UserMailer", "welcome_email", "deliver_now", #>
如有任何帮助,我们将不胜感激。谢谢。
您使用的是什么 ActiveJob 后端?
- ActiveJob 提供异步执行但本身不提供异步性。
您需要使用一些异步后端,例如 sidekiq
、delayed_job
或其他。
这是因为您没有设置时间,rails取默认时间。并且在日志文件中还显示 deliver_later 方法尚未被调用。
尝试使用:
UserMailer.welcome_email(self).deliver_later(wait: 1.minute)
然后一分钟后查看日志。
deliver_now
一次发送一封电子邮件。
如果您使用 deliver_later
,则必须使用像 Sidekiq
这样的 ActiveJob 运行程序,您可以看到已发送此 gist Sending emails with ActionMailer and Sidekiq
also see this for basic Sidekiq
电子邮件。
排队要通过活动作业发送的电子邮件。当作业运行时,它将使用 deliver_now
.
发送电子邮件
UserMailer.welcome_email(self).deliver_later(wait: 1.hour)
基本上,deliver_later
是异步的。当您使用此方法时,此时不会发送电子邮件,而是将其推入作业队列。如果作业不是 运行,则不会发送电子邮件。 deliver_now
将立即发送电子邮件,无论作业的状态如何。 Here您可以查看交付方式的文档。
如果您使用 delayed_job,则必须 运行 rake jobs:work
我在 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] Enqueued ActionMailer::DeliveryJob (Job ID: d7114-464e-4a90-9721-126650) to Async(mailers) with arguments: "UserMailer", "welcome_email", "deliver_now", #>
如有任何帮助,我们将不胜感激。谢谢。
您使用的是什么 ActiveJob 后端?
- ActiveJob 提供异步执行但本身不提供异步性。
您需要使用一些异步后端,例如 sidekiq
、delayed_job
或其他。
这是因为您没有设置时间,rails取默认时间。并且在日志文件中还显示 deliver_later 方法尚未被调用。
尝试使用:
UserMailer.welcome_email(self).deliver_later(wait: 1.minute)
然后一分钟后查看日志。
deliver_now
一次发送一封电子邮件。
如果您使用 deliver_later
,则必须使用像 Sidekiq
这样的 ActiveJob 运行程序,您可以看到已发送此 gist Sending emails with ActionMailer and Sidekiq
also see this for basic Sidekiq
电子邮件。
排队要通过活动作业发送的电子邮件。当作业运行时,它将使用 deliver_now
.
UserMailer.welcome_email(self).deliver_later(wait: 1.hour)
基本上,deliver_later
是异步的。当您使用此方法时,此时不会发送电子邮件,而是将其推入作业队列。如果作业不是 运行,则不会发送电子邮件。 deliver_now
将立即发送电子邮件,无论作业的状态如何。 Here您可以查看交付方式的文档。
如果您使用 delayed_job,则必须 运行 rake jobs:work