1

中都沒有發現我有一個文件配置/初始化/ secrets.rb包含以下內容:Rails的配置變量初始化

Rails.configuration.smtp_domain = "derp.com" 
Rails.configuration.smtp_password = "derpderp" 
Rails.configuration.smtp_user = "[email protected]" 
Rails.configuration.smtp_address = "derp.derp.com" 

在我配置/環境/ development.rb我有以下:

config.action_mailer.smtp_settings = { 
    :address    => Rails.configuration.smtp_address, 
    :port     => 587, 
    :domain    => Rails.configuration.smtp_domain, 
    :user_name   => Rails.configuration.smtp_user,       
    :password    => Rails.configuration.smtp_password, 
    :authentication  => 'login',             
    :enable_starttls_auto => true              
} 

現在,當我bundle exec rails c我得到這個錯誤:

`method_missing': undefined method `smtp_address' for #<Rails::Application::Configuration:0x007f8c4505b238> (NoMethodError) 

但是如果我評論的SMTP配置出來,然後在控制檯我可以這樣做:

Loading development environment (Rails 3.2.1) 
irb(main):001:0> Rails.configuration.smtp_address 
=> "derp.derp.com" 

在生產中我不能評論這一點,但!任何幫助將不勝感激,謝謝!

+0

是該文件的路徑真正的config/initializers.secret.rb而不是'配置/初始化/ secret.rb'? – pjammer

+0

糟糕!這是一個錯誤的文件是在正確的地方。謝謝! – Blastula

回答

0
  1. 在這裏拋出一些東西,也許該文件在初始化程序目錄中是正確的?
  2. 你可以改變你的Rails.configuration....的東西,並改爲常量。例如,SMTP_DOMAIN = 'derp.com'

只是想,如果在工作第一,然後就可以看到跆拳道是怎麼回事Rails.configuration....東西。如果這是TDD,我們會說,讓我們把它變成綠色。我沒有看到Rails.configuration像個人那樣使用,但是誰知道,也許這是一回事。

+0

我愛你的TDD比喻!不幸的是,這給了我'未初始化的常量SMTP_ADDRESS(NameError)'這個'Rails.configuration'風格適合我加載env變量到我的'schedule.rb'文件與隨時gem。不過,這些環境文件有些不同之處,但對此方法並不滿意。 – Blastula

+0

好的,現在試試':: SMTP_DOMAIN'(或者你稱之爲的任何東西),看看它是否有效。只是爲了幽默我。 – pjammer

+0

我實際上從我以前的評論中得到完全相同的錯誤。錯誤消息不會顯示雙冒號,但我按照您的建議在development.rb文件中聲明瞭這種方式。感謝您的幫助! – Blastula

0

從來沒有見過這個未來,但如果我加require_relative 'initializers/secrets'到我的environment.rb的頂部,它的工作原理與我的預期一樣。

這是令我感到困惑的,因爲這在一個初始化程序,據我所知應該已經加載。

如果任何人都可以解釋爲什麼我會happly接受你的答案在我自己的。謝謝。

+0

我想說你可以接受你自己的答案。 ;) – henrebotha