2012-02-23 16 views
6

Desidero memorizzare le informazioni dell'account e-mail in un file config.yml. Sto caricando tali informazioni in una costante in un file di configurazione/inizializzatori Rails seguendo uno schema comune che ho visto online e delineato at this RailsCast. Sto cercando di impostare i valori predefiniti per Action Mailer usando config.action_mailer.smtp_settings all'interno del file config/application.rb, seguendo un esempio su Mat Harvard's Blog. Continuo a ricevere errori costanti non inizializzati all'avvio del mio server dei binari. Suppongo che application.rb venga chiamato prima dei config/inizializzatori. C'è un'altra posizione in cui posso impostare config.action_mailer.smtp_settings durante l'avvio, ma dopo l'esecuzione di config/inizializzatori?Come impostare i valori predefiniti di Action Mailer dopo l'esecuzione di config/inizializzatori?

Aggiornamento: Forse non sono stato chiaro nel mio post/domanda iniziale. Sto leggendo il file config.yml in un inizializzatore. Questo file di configurazione memorizza informazioni sull'account di posta elettronica come nome utente e password. Non voglio inserire queste informazioni (nome utente e password) nei file application.rb o environment.rb. Ho provato a spostare il mio codice nel file environment.rb, ma ho riscontrato lo stesso errore costante non inizializzato all'avvio delle rotaie.

Il mio codice per impostare le impostazioni mailer di azione simile a questa:

config.action_mailer.smtp_settings = { 
    :address    => APP_CONFIG[:email_config][:address], 
    :port     => APP_CONFIG[:email_config][:port], 
    :domain    => APP_CONFIG[:email_config][:email_domain], 
    :user_name   => APP_CONFIG[:email_config][:user_name], 
    :password    => APP_CONFIG[:email_config][:password], 
    :authentication  => :plain, 
    :enable_starttls_auto => true 
    } 

    config.action_mailer.default_url_options = { 
    :host => APP_CONFIG[:email_config][:host] 
    } 

che sto leggendo dal file config.yml per impostare la costante APP_CONFIG in un inizializzatore load_config.rb. Questo file contiene le 2 righe sotto:

raw_config = File.read(RAILS_ROOT + "/config/config.yml") 
APP_CONFIG = YAML.load(raw_config)[RAILS_ENV] 

risposta

0

Un inizializzatore probabilmente non è il posto giusto per queste informazioni, almeno non in Rails 3. Seguendo le linee guida del official ActionMailer guide, vorrei mettere le informazioni in ambiente file - presumo che la definizione delle costanti cambierà a seconda dell'ambiente in cui ti trovi, e questo avrà lo stesso effetto. Quindi, in config/ambienti/production.rb:

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => 'baci.lindsaar.net', 
    :user_name   => '<username>', 
    :password    => '<password>', 
    :authentication  => 'plain', 
    :enable_starttls_auto => true } 

spudoratamente rubato dalla guida ho appena fatto riferimento.

+2

sto cercando di evitare di mettere il nome utente e la password in entrambi i application.rb oi file environment.rb. Ho aggiornato la mia domanda/post originale per includere esempi di codice. Il codice di configurazione che hai fornito sopra non era nell'inizializzatore: era in application.rb. Solo il codice da leggere nel mio file config.yml era nell'inizializzatore. –

+0

Quindi hai caricato l'inizializzatore prima di visualizzare i file dell'ambiente? – xecutioner

4

Si può mettere qualcosa di simile in un inizializzatore:

ActionMailer::Base.default_url_options = { :host => 'mysite.com' } 
Problemi correlati