2012-06-28 31 views
6

tôi đặt cấu hình ActionMailer của tôi trong tập tin config/environment.rb tôi như vậy:Rails ActionMailer bỏ qua cài đặt trong 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 

hiểu biết của tôi là rằng đây là cách chính xác để cấu hình cài đặt sẽ áp dụng cho tất cả các môi trường của bạn.

Điều này làm việc tốt trong phát triển, nhưng khi tôi triển khai đến máy chủ dàn dựng của mình (sử dụng tệp cấu hình tùy chỉnh config/environments/staging.rb), tôi đã gặp lỗi "kết nối bị từ chối" khi gửi thư. staging.rb không có cài đặt liên quan đến bưu phẩm nào cả.

Vì vậy, tôi bị sa thải lên giao diện điều khiển trên dàn máy chủ với RAILS_ENV=staging rails c, và "đặt Rails.application.config.action_mailer" cho thấy rằng các thiết lập tôi đặt trong environment.rb có thực sự có hiệu lực, nhưng đối với một số lý do ActionMailer không sử dụng chúng .

Qua thử nghiệm, tôi thấy rằng sao chép cấu hình trực tiếp vào staging.rb giải quyết được sự cố. Tại sao điều này lại cần thiết? Nếu bảng điều khiển đường ray hiển thị các cài đặt có hiệu lực, tại sao ActionMailer không sử dụng chúng?

Đào sâu hơn, tôi thấy rằng DELIVERY_METHOD lớp bưu phẩm của tôi không được thiết lập như mong đợi:

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}> 

Trả lời

12

đặt

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 

trước MyApp::Application.initialize!

+3

Tôi thực sự muốn xem các SQL Stackoverflow đăng nhập khi câu hỏi của tôi được đăng so với khi bạn trả lời (và giải quyết) nó ... phải là <30 giây. –

+0

hahaha: P Tôi đoán vậy: P –

+0

Câu hỏi hay! Câu trả lời chính xác! Giải quyết một vấn đề khó khăn cho tôi. – thisfeller

Các vấn đề liên quan