如何在config / initializers运行后设置Action Mailer默认值?
我想将电子邮件帐户信息存储在config.yml文件中。 我将这些信息加载到Rails config / initializers文件中的一个常量中,遵循我在线看到并在此RailsCast中概述的常见模式。 我试图在config / application.rb文件中使用config.action_mailer.smtp_settings设置Action Mailer的默认设置,以下是Mat Harvard博客中的一个示例。 启动我的Rails服务器时,我不断收到未初始化的常量错误。 我假设在config / initializers之前调用了application.rb。 是否有另一个位置可以在启动过程中设置config.action_mailer.smtp_settings,但在config / initializers运行后?
更新:在我最初的帖子/问题中,我可能不清楚。 我正在读取初始化程序中的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]
你可以在初始化器中加入这样的东西:
ActionMailer::Base.default_url_options = { :host => 'mysite.com' }
一个初始化器可能不是这个信息的正确位置,至少在Rails 3中是如此。遵循ActionMailer官方指南中的指导原则,我会把这些信息放在环境文件中 - 我推测常量的定义将会改变你在什么样的环境中,这会产生同样的效果。 所以在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 }
我刚才引用的指南中无耻地被盗了。
另一种方法是将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
链接地址: http://www.djcxy.com/p/57793.html
上一篇: How to set Action Mailer defaults after config/initializers run?