簡體   English   中英

Rails ActionMailer忽略environment.rb中的設置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM