我正在尝试在其开发环境中处理Rails站点,我想在那里测试电子邮件传递,而我无法确定为什么在主environment.rb
中声明的属性不会被覆盖通过我认为在启动rails应用程序时加载的更具体的development.rb
文件。
我的理解是,更具体的环境配置文件中的值应该覆盖共享的'environment.rb'配置文件,所以如果我在config/environment.rb
中声明了一些这样的电子邮件设置......
ActionMailer::Base.smtp_settings = {
:address => 'smtp.hostingcompany.com',
:port => 25,
:domain => 'productiondomain.net',
:authentication => :login,
:user_name => "productiondomainmailer",
:password => "TOP_SEKRIT"
}
...然后,下面config/environments/development.rb
中的代码应覆盖ActionMailer:Base.smtp_settings
哈希:
ActionMailer::Base.smtp_settings = {
:domain => 'developmentdomain.net'
}
但是,在开发环境中加载应用时,或者从script/console
加载ActionMailer::Base.smtp_settings[:domain]
时,它仍会列为'productiondomain.net'。
为什么会发生这种情况?
答案 0 :(得分:2)
要设置开发环境的配置:
config.action_mailer.smtp_settings =
而不是:
ActionMailer::Base.smtp_settings =
在 config / environments / development.rb
中请注意,在 config / environments / development.rb 中,您需要指定完整的设置集,而不只是:domain
,因为哈希值会覆盖现有值,而不是与之合并它
同样,通过将config.action_mailer.smtp_settings =
放在Rails::Initializer.run do |config|
块中,在 config / environments.rb 中设置默认值。
答案 1 :(得分:1)
这应该有效:
config.action_mailer.smtp_settings = {
:address => 'smtp.some_host.com',
:port => 25,
:domain => 'developmentdomain.net',
:authentication => :login,
:user_name => 'blabla',
:password => "some_pass"
}