7

次のように、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}> 
4

1 に答える 1

12

置く

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!

于 2012-06-28T20:09:58.767 に答える