Rails Heroku 上的 ActionMailer 拦截器
Rails ActionMailer interceptor on Heroku
我尝试在我的 Rails 应用程序中注册一些 ActionMailer
拦截器。
例如,在我的 /config/initializers/mailer.rb
if Rails.env.staging?
class PrefixStagingMailSubject
def self.delivering_email(mail)
mail.subject = "TEST #{mail.subject}"
end
end
ActionMailer::Base.register_interceptor(PrefixStagingMailSubject)
end
这在我的开发机器上运行良好。但它不在 Heroku 服务器上。
偶尔我发现它在 Devise 发送的邮件中有效(例如重设密码邮件)。这意味着拦截器虽然已经注册。
但在我的邮件中它仍然不起作用。例如我的 ReportsMailer
class ReportsMailer < ActionMailer::Base
def report_email(email, title, public_url)
subject = "The #{title} report you've requested was generated"
body = <<-EOS
The #{title} report you've requested was generated
You can download it by clicking the link below:
------------
#{public_url}
EOS
mail(to: email, subject: subject, body: body)
end
end
可能是哪里出了问题?
有人可以帮助我吗?
谢谢。
所以我觉得很傻。
消息发送由 Sidekiq 处理。
但是我完全忘记了 Sidekiq 有它自己的 ENV
.
我有 config/initializers/mailer.rb
和以下代码
if Rails.env.staging?
class PrefixStagingMailSubject
def self.delivering_email(mail)
mail.subject = "TEST #{mail.subject}"
end
end
ActionMailer::Base.register_interceptor(PrefixStagingMailSubject)
end
所以我认为问题是 Sidekiq 运行 没有指定
ENV
并有一些默认值 ENV
(可能是开发)。
我像这样更新了我的 Procfile 文件
web: ...
worker: bundle exec sidekiq -e $SIDEKIQ_ENV ...
并在 Heroku 配置中设置 SIDEKIQ_ENV = staging
。
现在一切似乎工作正常。
我尝试在我的 Rails 应用程序中注册一些 ActionMailer
拦截器。
例如,在我的 /config/initializers/mailer.rb
if Rails.env.staging?
class PrefixStagingMailSubject
def self.delivering_email(mail)
mail.subject = "TEST #{mail.subject}"
end
end
ActionMailer::Base.register_interceptor(PrefixStagingMailSubject)
end
这在我的开发机器上运行良好。但它不在 Heroku 服务器上。
偶尔我发现它在 Devise 发送的邮件中有效(例如重设密码邮件)。这意味着拦截器虽然已经注册。
但在我的邮件中它仍然不起作用。例如我的 ReportsMailer
class ReportsMailer < ActionMailer::Base
def report_email(email, title, public_url)
subject = "The #{title} report you've requested was generated"
body = <<-EOS
The #{title} report you've requested was generated
You can download it by clicking the link below:
------------
#{public_url}
EOS
mail(to: email, subject: subject, body: body)
end
end
可能是哪里出了问题?
有人可以帮助我吗? 谢谢。
所以我觉得很傻。
消息发送由 Sidekiq 处理。
但是我完全忘记了 Sidekiq 有它自己的 ENV
.
我有 config/initializers/mailer.rb
和以下代码
if Rails.env.staging?
class PrefixStagingMailSubject
def self.delivering_email(mail)
mail.subject = "TEST #{mail.subject}"
end
end
ActionMailer::Base.register_interceptor(PrefixStagingMailSubject)
end
所以我认为问题是 Sidekiq 运行 没有指定
ENV
并有一些默认值 ENV
(可能是开发)。
我像这样更新了我的 Procfile 文件
web: ...
worker: bundle exec sidekiq -e $SIDEKIQ_ENV ...
并在 Heroku 配置中设置 SIDEKIQ_ENV = staging
。
现在一切似乎工作正常。