为 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,您可以看到他们已经将默认队列名称设置为“mailers”。
不过,如果您想更改该默认值,您始终可以通过在初始化程序或加载的 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 在 Rails 中发送给多个收件人