[英]Rails ActionMailer ignores settings in environment.rb
我把我的ActionMailer配置放在我的config/environment.rb
文件中,如下所示:
MyApp::Application.initialize!
MyApp::Application.configure do
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.elasticemail.com",
port: 2525,
domain: "myapp.com",
authentication: "plain",
user_name: "my_username",
password: "my_password",
enable_starttls_auto: true
}
end
我的理解是,這是配置適用於所有環境的設置的正確方法。
這在開發中運行良好,但是當我部署到我的登台服務器(使用自定義config/environments/staging.rb
配置文件)時,我在嘗試傳遞郵件時遇到“連接被拒絕”錯誤。 staging.rb
根本沒有與郵件程序相關的設置。
所以我使用RAILS_ENV=staging rails c
在登台服務器上啟動了控制台,並且“puts Rails.application.config.action_mailer”顯示我放在environment.rb
中的設置確實有效,但由於某些原因,ActionMailer不是使用它們。
通過實驗,我發現將配置直接復制到staging.rb
可以解決問題。 為什么這有必要? 如果rails控制台顯示設置有效,為什么ActionMailer不使用它們?
深入挖掘,我看到我的郵件程序類的delivery_method未按預期設置:
MyMailer.foo(Person.find(1)).delivery_method
=> #<Mail::SMTP:0x0000000370d4d0 @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}>
放
MyApp::Application.configure do
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.elasticemail.com",
port: 2525,
domain: "myapp.com",
authentication: "plain",
user_name: "my_username",
password: "my_password",
enable_starttls_auto: true
}
end
在MyApp::Application.initialize!
之前MyApp::Application.initialize!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.