Как установить значения по умолчанию для Action Mailer после запуска config / initializer? - PullRequest
8 голосов
/ 23 февраля 2012

Я хочу сохранить информацию об учетной записи электронной почты в файле config.yml.Я загружаю эту информацию в константу в файле конфигурации / инициализатора Rails по общему шаблону, который я видел в Интернете и обрисовал в общих чертах на этом RailsCast .Я пытаюсь установить значения по умолчанию для Action Mailer с помощью config.action_mailer.smtp_settings внутри файла config / application.rb, следуя примеру на Блог Мэтта Гарварда .Я продолжаю получать неинициализированные постоянные ошибки при запуске моего сервера rails.Я предполагаю, что application.rb вызывается до конфигурации / инициализаторов.Есть ли другое место, где я могу установить config.action_mailer.smtp_settings во время запуска, но после запуска config / initializer?

Обновление: возможно, я не был понятен в своем первом посте / вопросе.Я читаю файл config.yml в инициализаторе.Этот файл конфигурации хранит информацию об учетной записи электронной почты, такую ​​как имя пользователя и пароль.Я не хочу помещать эту информацию (имя пользователя и пароль) в файлы application.rb или environment.rb.Я попытался переместить мой код в файл environment.rb, но при запуске rails обнаружил ту же неинициализированную постоянную ошибку.

Мой код для установки параметров почтовой программы действий выглядит следующим образом:

  config.action_mailer.smtp_settings = {
    :address              => APP_CONFIG[:email_config][:address],
    :port                 => APP_CONFIG[:email_config][:port],
    :domain               => APP_CONFIG[:email_config][:email_domain],
    :user_name            => APP_CONFIG[:email_config][:user_name],
    :password             => APP_CONFIG[:email_config][:password],
    :authentication       => :plain,
    :enable_starttls_auto => true
  }

  config.action_mailer.default_url_options = {
    :host => APP_CONFIG[:email_config][:host]
  }

Я читаю из файла config.yml, чтобы установить константу APP_CONFIG в инициализаторе load_config.rb.Этот файл содержит 2 строки ниже:

raw_config = File.read(RAILS_ROOT + "/config/config.yml")
APP_CONFIG = YAML.load(raw_config)[RAILS_ENV]

Ответы [ 3 ]

5 голосов
/ 16 января 2013

Вы можете поместить что-то вроде этого в инициализаторе:

ActionMailer::Base.default_url_options = { :host => 'mysite.com' }
1 голос
/ 22 марта 2018

Альтернативой является использование Figaro для переменных среды:

# config/initializers/smtp_config.rb

Rails.application.configure do
  ActionMailer::Base.smtp_settings = { address: Figaro.env.smtp_address,
                                         port: (Figaro.env.smtp_port || 587),
                                         domain: Figaro.env.smtp_domain,
                                         user_name: Figaro.env.smtp_user_name,
                                         password: Figaro.env.smtp_password,
                                         authentication: Figaro.env.smtp_authentication,
                                         enable_starttls_auto: Figaro.env.smtp_enable_starttls_auto,
                                         openssl_verify_mode: Figaro.env.smtp_openssl_verify_mode,
                                         ssl: Figaro.env.smtp_ssl,
                                         tls: Figaro.env.smtp_tls }
end
0 голосов
/ 23 февраля 2012

Вероятно, инициализатор не подходит для этой информации, по крайней мере, в Rails 3. Следуя указаниям официального руководства ActionMailer , я бы поместил эту информацию в файл среды - IПредположим, что определение констант будет меняться в зависимости от того, в какой среде вы находитесь, и это будет иметь тот же эффект.Так в config / средах / production.rb:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => 'baci.lindsaar.net',
  :user_name            => '<username>',
  :password             => '<password>',
  :authentication       => 'plain',
  :enable_starttls_auto => true  }

Бесстыдно украдено из руководства, на которое я только что ссылался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...