2012-02-23 64 views
6

我想將電子郵件帳戶信息存儲在config.yml文件中。我將這些信息加載到Rails config/initializers文件中的一個常量中,遵循我在線上看到的常見模式並列出了at this RailsCast。我試圖在config/application.rb文件中使用config.action_mailer.smtp_settings爲Action Mailer設置默認值,下面是Mat Harvard's Blog的示例。啓動我的Rails服務器時,我不斷收到未初始化的常量錯誤。我假設在config/initializers之前調用了application.rb。是否有另一個位置可以在啓動過程中設置config.action_mailer.smtp_settings,但在config/initializers運行後?如何在config/initializers運行後設置Action Mailer默認值?

更新: 我可能在我最初的帖子/問題中沒有清楚。我正在讀取初始化程序中的config.yml文件。此配置文件存儲電子郵件帳戶信息,例如用戶名和密碼。我不想將這些信息(用戶名和密碼)放在application.rb或environment.rb文件中。我嘗試將我的代碼移動到environment.rb文件,但啓動rails時遇到相同的未初始化的常量錯誤。

我的代碼來設置動作郵件的設置是這樣的:

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

我從config.yml文件設置在load_config.rb初始化的APP_CONFIG恆念。該文件包含了2線以下:

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

回答

0

一個初始化可能不是這些信息在正確的地方,至少在Rails的3.繼在official ActionMailer guide的指引,我會把信息環境文件 - 我認爲常量的定義會根據你所處的環境而改變,這也會有相同的效果。所以在config/environments/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 } 

從指南我無恥地偷了我剛剛引用。

+2

我試圖避免將用戶名和密碼,無論是在application.rb中或environment.rb中的文件。我已更新我的原始問題/帖子以包含代碼示例。上面提供的配置代碼不在初始化程序中 - 它在application.rb中。只是在我的config.yml文件中讀取的代碼是在初始化器中。 – 2012-02-23 20:49:00

+0

那麼你有沒有在環境文件之前加載初始化程序? – xecutioner 2013-11-09 06:35:05

4

你可以把這樣的事情在初始化:

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