在AWS上使用deliver_later的Rails Action Mailer

问题描述 投票:3回答:4

我的生产应用程序在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”,#>

任何帮助,将不胜感激。谢谢。

ruby-on-rails amazon-ec2 rails-activejob
4个回答
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)

method-i-deliver_later

基本上,deliver_later是异步的。使用此方法时,此时不会发送电子邮件,而是将其推送到作业的队列中。如果作业未运行,则不会发送电子邮件。无论工作状态如何,deliver_now都会立即发送电子邮件。 Here你可以看到交付方法的文档。


1
投票

What ActiveJob backend are you using?

  • ActiveJob提供异步执行但不提供异步性本身。

你需要使用一些异步后端,如sidekiqdelayed_job或其他东西。


0
投票

这是因为您没有设置时间和轨道获取默认时间。并且在日志文件中还显示尚未调用deliver_later方法。

尝试使用:

UserMailer.welcome_email(self).deliver_later(wait: 1.minute)

然后在一分钟后检查日志。


0
投票

如果您使用delayed_job,则必须运行rake jobs:work

https://www.youtube.com/watch?v=AoGPaWEasxs

© www.soinside.com 2019 - 2024. All rights reserved.