如何在config / initializers运行后设置Action Mailer默认值?

时间:2012-02-23 05:24:34

标签: ruby-on-rails

我想将电子邮件帐户信息存储在config.yml文件中。我将这些信息加载到Rails配置/初始化文件中的常量中,遵循我在网上看到并概述at this RailsCast的常见模式。我正在尝试使用config / application.rb文件中的config.action_mailer.smtp_settings设置Action Mailer的默认值,遵循Mat Harvard's Blog上的示例。启动rails服务器时,我不断发现未初始化的常量错误。我假设在配置/初始化器之前调用application.rb。是否有另一个位置,我可以在启动期间设置config.action_mailer.smtp_settings,但是在配置/初始化程序运行之后?

更新: 我在最初的帖子/问题中可能不太清楚。我正在初始化程序中读取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文件,以在load_config.rb初始值设定项中设置APP_CONFIG常量。该文件包含以下两行:

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

3 个答案:

答案 0 :(得分:5)

你可以把这样的东西放在初始化器中:

ActionMailer::Base.default_url_options = { :host => 'mysite.com' }

答案 1 :(得分:1)

另一种方法是将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

答案 2 :(得分:0)

初始化程序可能不是这个信息的正确位置,至少在Rails 3中没有。遵循official ActionMailer guide中的指导原则,我会将信息放在环境文件中 - 我假设定义为常量将根据您所处的环境而变化,这将产生相同的效果。所以在config / environments / 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  }

从我刚引用的指南中无耻地偷走了。