2016-01-12 3 views
3

Я пытаюсь зарегистрировать некоторые перехватчики в моем приложении Rails. Например, в моем /config/initializers/mailer.rbРельсы Перехватчик ActionMailer на Heroku

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 

Что может быть не так?

Не могли бы вы помочь мне? Спасибо.

+0

Вы можете проверить переменную окружения RAILS_ENV для своего приложения? Это должно быть «постановка», а не «производство». – eugen

+0

@eugen, это была моя мысль и в начале. Но сброс пароля был отправлен с тестом в тему. Это означает, что «RAILS_ENV = постановка» и даже перехватчик зарегистрированы правильно. – Aleksey

+0

Это действительно странно, если он работает для одной почтовой программы, я не понимаю, почему это не работает для всех. У меня есть аналогичный перехватчик, который работает, единственное отличие состоит в том, что я регистрирую его с помощью 'Mail.register_interceptor' вместо' ActionMailer :: Base.register_interceptor', и я регистрирую его перед настройкой остальной части «ActionMailer :: Base». smtp'. Я сомневаюсь, что это изменило бы ситуацию. – eugen

ответ

0

Так что я чувствую себя очень глупо.
Отправка сообщений обрабатывается сайтом 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 ... 

и установить SIDEKIQ_ENV = staging в Heroku конфигурации.

Теперь кажется, что все работает нормально.

 Смежные вопросы

  • Нет связанных вопросов^_^