【问题标题】:Rails 4.2.5 - ActiveJob using deliver_now even after specifying deliver_laterRails 4.2.5 - ActiveJob 即使在指定 Deliver_later 之后也使用 Deliver_now
【发布时间】:2018-04-11 05:43:49
【问题描述】:

我计划在 Rails 4.2.5 中使用 ActionMailer#deliver_later 异步发送邮件。

AppMailer 文件使用“邮件”通过邮件发送,我正在使用 Deliver_later,如下所示:

AppMailer.project_created_support_mail(@project).deliver_later

但是,日志显示传递的参数仍然是 'deliver_now'

[ActiveJob] [ActionMailer::DeliveryJob] [b341ea8c-ca96-4a4e-8079-572925864352] Performing ActionMailer::DeliveryJob from Inline(mailers) with arguments: "AppMailer", "project_created_support_mail", "deliver_now"

我假设没有明确需要附加像 Sidekiq 或 Resque 这样的队列。

有人可以帮助了解我在这里缺少什么吗?

编辑:我面临的最初问题是发送邮件的操作需要大约 5 秒,无论有无deliver_later。在尝试调试问题时,我发现参数仍然是“deliver_now”(上面的日志)。正如下面@torrocus 所指出的,'deliver_now' 在队列中被调用。但是,deliver_later 需要约 5 秒的问题仍然存在。

【问题讨论】:

  • 如果是在生产或类似的,你是否重启了服务器?
  • 尝试重启你的服务器。
  • 我目前正在开发中试用它。问题是使用或不使用deliver_later 都需要大约5 秒的时间来传递邮件

标签: ruby-on-rails ruby-on-rails-4 actionmailer rails-activejob


【解决方案1】:

当您调用#deliver_later 方法时,您将作业放入队列活动作业中。在队列内部,它调用#deliver_nowdeliver_later (ActionMailer::MessageDelivery)

在开发中我建议使用 gem mailcatcher

【讨论】:

  • 谢谢!这解释了日志。但是,无论是否使用 Deliver_later,每封邮件都需要大约 5 秒的时间来交付。知道为什么吗?
  • 发送电子邮件总是需要一些时间。电子邮件是异步。建议在单独的队列中执行此类进程,以免阻塞应用程序。用户不应等待发送电子邮件。
  • 这不是deliver_later的重点吗?还是我在这里遗漏了什么?
  • 不完全是。 deliver_later - 电子邮件将通过 Active Job 发送。 deliver_now - 发送电子邮件,但您应该记住此协议不能实时工作
猜你喜欢
  • 2015-12-13
  • 2016-10-18
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
相关资源
最近更新 更多