【问题标题】:Rails ActionMailer interceptor on HerokuHeroku 上的 Rails ActionMailer 拦截器
【发布时间】: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


【解决方案1】:

所以我觉得自己很傻。
消息发送由 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

现在一切似乎都正常了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2014-03-10
    • 2013-06-25
    • 2018-08-09
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多