2012-06-28 29 views
6

ho messo la mia ActionMailer config nella mia lima config/environment.rb in questo modo:Rails ActionMailer ignora le impostazioni in 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 

mia comprensione è che questo è il modo corretto per configurare le impostazioni che verranno applicate a tutti gli ambienti.

Questo ha funzionato bene in fase di sviluppo, ma quando ho distribuito al mio server di staging (che utilizza un file di configurazione personalizzato config/environments/staging.rb) ho ricevuto un errore "connessione rifiutata" quando ha tentato di recapitare la posta. staging.rb non ha alcuna impostazione relativa al mailer.

Così ho sparato la console sul server di gestione temporanea con RAILS_ENV=staging rails c, e "mette Rails.application.config.action_mailer" mostra che le impostazioni ho messo in environment.rb sono infatti a tutti gli effetti, ma per qualche ragione ActionMailer non li sta usando .

Attraverso la sperimentazione ho scoperto che copiare la configurazione direttamente in staging.rb risolve il problema. Perché è necessario? Se la console di rails mostra che le impostazioni sono effettive, perché ActionMailer non le utilizza?

Scavando più a fondo, vedo che delivery_method della mia classe mailer non è impostata come previsto:

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

risposta

12

messo

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 

prima MyApp::Application.initialize!

+3

Mi piacerebbe davvero vedere l'SQL StackOverflow registra per quando la mia domanda è stata pubblicata vs quando hai risposto (e risolto) ... doveva essere <30 secondi. –

+0

hahaha: P Credo di sì: P –

+0

Ottima domanda! Bella risposta! Risolto un problema spinoso per me. – thisfeller

Problemi correlati