为 ActionMailer Deliver_later 设置默认队列?

Posted

技术标签:

【中文标题】为 ActionMailer Deliver_later 设置默认队列?【英文标题】:Setting a default queue for ActionMailer deliver_later? 【发布时间】:2015-03-30 12:29:29 【问题描述】:

您可以通过添加 :queue 作为可选参数来指定在 ActionMailer 中调用 Deliver_later 时使用哪个队列,例如:

Notifier.welcome(User.first.id).deliver_later(queue: "low")

对于所有的 ActionMailer,有没有一种通用的方法来做到这一点?设置默认的 ActionMailer 队列?

【问题讨论】:

【参考方案1】:

在 Rails 5 之前

查看 Rails 的source code,您可以看到他们已经将默认队列名称设置为“ma​​ilers”。

不过,如果您想更改该默认值,您始终可以通过在初始化程序或加载的 lib 文件中包含以下代码来覆盖它:

class ActionMailer::DeliveryJob
  queue_as :default_mailer_queue
end

从 Rails 5 开始

Rails 5 允许您通过简单的配置来设置默认队列命名。

例如加你application.rb:

config.action_mailer.deliver_later_queue_name = 'default_mailer_queue'

【讨论】:

Rails 5 中会有一个配置选项:github.com/rails/rails/commit/… 不幸的是,它似乎不支持为不同的邮件设置不同的队列。我想最好的方法是使用猴子补丁:queue_as mailer = self.arguments.first; mailer == "FooMailer" ? :foo : :bar

以上是关于为 ActionMailer Deliver_later 设置默认队列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ApplicationMailer(或 ActionMailer)设置为默认使用 Activejob/sidekiq

ruby 如何在ActionMailer中为各个用户设置* url_options *

使用 ActionMailer 的电子邮件注册确认

使用 ActionMailer 在 Rails 中发送给多个收件人

Rails ActionMailer - 格式化发件人和收件人姓名/电子邮件地址

如何在 ActionMailer 中捕获错误异常