【发布时间】:2020-02-18 18:09:18
【问题描述】:
我们需要使用 sidekiq 发送所有 Rails 5 电子邮件,我发现多个链接(link #1、link #2)显示了我们如何为特定的新邮件程序执行此操作,但没有关于如何执行此操作的资源作为默认值(覆盖 ApplicationMailer(或 ActionMailer)的行为)
我可以使用 devise_async gem 来设计电子邮件,但我想让它成为跨应用程序发送的所有电子邮件的默认行为
那么如何将deliver_later 方法链接到默认邮件程序或注入一个sidekiq 作业以供默认邮件程序始终使用?
我尝试了几种将deliver_later 方法添加到application_mailer.rb 的变体,但都没有奏效
更新:
我想覆盖ApplicationMailer 或ActionMailer 以避免为每个邮件程序单独调用deliver_later,目标是在所有邮件程序继承的父类中执行此操作以避免重复并保持DRY原则
我期待更新此文件application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: 'xxxxxx'
layout 'mailer'
# Maybe adding a way here to chain the deliver_later method
def initialize
# somehow chain deliver_later method after the object creation from this class
end
end
【问题讨论】:
-
涉及一些设置,但关注gist.github.com/maxivak/690e6c353f65a86a4af9 应该会有所帮助
-
谢谢马克,不幸的是,这是我的意思的链接之一,他在这里谈论的是新创建的邮件程序,而不是
ActionMailer或ApplicationMailer类的全局配置 -
啊,我的错 - 看起来下面的答案应该对其进行排序:)
-
不幸的是,艾哈迈德所说的解决方案与您所说的相同:) 我想覆盖
ApplicationMailer的默认值以避免为每个邮件单独执行此操作,我将进一步澄清问题
标签: ruby-on-rails actionmailer sidekiq rails-activejob