【发布时间】:2016-04-17 06:27:19
【问题描述】:
我尝试在我的 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
可能出了什么问题?
有人可以帮我吗? 谢谢。
【问题讨论】:
-
您能检查一下您的应用程序的 RAILS_ENV 环境变量吗?应该是
staging,而不是production。 -
@eugen 这也是我一开始的想法。但是重置密码邮件的主题是 TEST。这意味着
RAILS_ENV = staging甚至拦截器注册正确。 -
这确实很奇怪,如果它适用于一个邮件,我不明白为什么它不适用于所有人。我有一个类似的拦截器,唯一的区别是我用
Mail.register_interceptor而不是ActionMailer::Base.register_interceptor注册它,我在设置其余的ActionMailer::Base.smtp设置之前注册它。不过,我怀疑这会有所作为。 -
@eugen 我同意你的看法,这很奇怪)谢谢你的建议。我已经考虑过加载顺序的重要性,但在开发中再次正常工作。我会尝试使用
Mail而不是ActionMailer::Base并让您知道。
标签: ruby-on-rails heroku actionmailer