对于我的部署,我更喜欢在config/
下的YML文件中包含所有Rails配置选项。我遇到了action_mailer.smtp_settings
的特殊问题。如何在YML文件中设置ActionMailer SMTP设置?
我有一个文件,config/smtp.yml
:
development:
address: localhost
port: 1025
test:
production:
address: smtp.xs4all.nl
port: 465
authentication: plain
user_name: xxxxx
password: xxxxx
tls: true
然后我尝试通过初始化包括这些值。 config/initializers/smtp.rb
:
options = YAML.load_file(Rails.root.join('config', 'smtp.yml'))[Rails.env]
options.each do |name, value|
Portfolio::Application.config.action_mailer.smtp_settings[name.to_sym] = value
end unless options.nil?
这会将smtp.yml
文件,分析该返回的散列当前的环境中,例如
{"address"=>"smtp.xs4all.nl", "port"=>465, "authentication"=>"plain", "user_name"=>"xxxxx", "password"=>"xxxxx", "tls"=>true}
键转换为符号,并补充说,到SMTP的设置,resuling在如:
irb(main):002:0> Portfolio::Application.config.action_mailer.smtp_settings
=> {:port=>465, :address=>"smtp.xs4all.nl", :authentication=>"plain", :user_name=>"xxxxx", :password=>"xxxx", :tls=>true}
但部署到生产的时候,这会导致一些冲突,可能是因为某些部分还没有开机了。卡皮斯特拉诺失败:
* executing "cd -- /var/www/ANT_cms/releases/20131218170336 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
servers: ["li153-5.members.linode.com"]
[li153-5.members.linode.com] executing command
** [out :: li153-5.members.linode.com] rake aborted!
** [out :: li153-5.members.linode.com] undefined method `[]=' for nil:NilClass
为什么我的Portfolio::Application.config.action_mailer.smtp_settings
为零?我如何确保actionMailers配置选项已被加载?
,我不认为“TLS”是smtp_settings有效的领域,这可能是为什么'组合:: Application.config.action_mailer .smtp_settings [:tls]'返回nil。看看http://api.rubyonrails.org/classes/ActionMailer/Base.html – aruanoc
是的,我没有在文档中看到它,但对我来说,它解决了我遇到证书错误的问题。设置这个,解决了我的错误。 – berkes