2012-06-28 11 views
6

puse mi config ActionMailer en mi archivo config/environment.rb así:rieles ActionMailer ignora los ajustes en 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 

Mi entendimiento es que esta es la forma correcta de configurar los ajustes que se aplicarán a todos los entornos.

Esto funcionó bien en el desarrollo, pero cuando implementé en mi servidor de transición (que usa un archivo de configuración personalizado config/environments/staging.rb) recibí un error de "conexión rechazada" cuando intentó entregar el correo. staging.rb no tiene ninguna configuración relacionada con el correo.

Así que disparó la consola en el servidor intermedio con RAILS_ENV=staging rails c, y "pone Rails.application.config.action_mailer" muestra que los ajustes que puse en environment.rb son, en efecto, en efecto, pero por alguna razón no se ActionMailer usarlos .

A través de la experimentación encontré que copiar la configuración directamente en staging.rb resuelve el problema. ¿Por qué es esto necesario? Si la consola de rieles muestra que la configuración está en vigencia, ¿por qué ActionMailer no los está usando?

de excavación más profunda, veo que delivery_method de mi clase de gestor de correo no está configurado como se esperaba:

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

Respuesta

12

poner

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 

antes MyApp::Application.initialize!

+3

Realmente me gustaría ver el SQL Stackoverflow registros para cuando se publicó mi pregunta vs cuando respondiste (y resolvió) ... tenía que ser <30 segundos. –

+0

jajaja: P Supongo que sí: P –

+0

¡Gran pregunta! ¡Gran respuesta! Resolvió un problema complicado para mí. – thisfeller

Cuestiones relacionadas