2012-02-20 39 views
2

我想在我的Rails 3.1應用程序的初始化期間加載yaml配置文件,並且對YAML.load的調用永遠不會返回。這裏是我的初始化文件:YAML.load永遠不會返回在Rails初始化程序中

STRIPE_CONFIG = begin 
    config = YAML.load(Rails.root.join('config', 'stripe.yml')) || {} 
    config = config[Rails.env] || {} 
    config.to_options 
end 

這裏是我的stripe.yml文件:

default: &default 
    api_key: test 
    public_key: test 

development: 
    <<: *default 

test: 
    <<: *default 

production: 
    api_key: prod 
    public_key: prod 

無論出於何種原因,YAML.load調用永遠不會返回。如果我執行堆棧跟蹤,它似乎卡在syck.rb第135行。有趣的是,我讓我的應用程序在打破之前坐的時間越長,第135行出現的呼叫就越多。

/Users/mhuggins/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/syck.rb:135:in `read' 
/Users/mhuggins/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/syck.rb:135:in `read' 
/Users/mhuggins/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/syck.rb:135:in `load' 
/Users/mhuggins/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/syck.rb:135:in `load' 
/Users/mhuggins/Sites/dating/config/initializers/stripe.rb:2:in `<top (required)>' 
... 

我已經明確地嘗試過使用Psych,而不是使用Syck,但沒有運氣。 (它也掛起來。)

STRIPE_CONFIG = begin 
    require 'psych' 
    config = Psych.load(Rails.root.join('config', 'stripe.yml')) || {} 
    config = config[Rails.env] || {} 
    config.to_options 
end 

回答

3

呃,顯然我只是需要明確地讀取文件。我改變了這一點:

YAML.load(Rails.root.join('config', 'stripe.yml')) 

這樣:

YAML.load(File.open(Rails.root.join('config', 'stripe.yml'))) 
+0

這條前線適合我,不知道爲什麼不適合你 – 2012-11-06 22:53:10

3

答案是有點晚了,但我已經在類似的問題,剛纔絆倒;)

你可以使用YAML::load_file,其預計的文件名作爲論據。

相關問題