我正在尝试在我的Rails 3.1应用程序初始化期间加载yaml配置文件,并且对YAML.load的调用永远不会返回。这是我的初始化文件:
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
答案 0 :(得分:3)
YAML.load(Rails.root.join('config', 'stripe.yml'))
到此:
YAML.load(File.open(Rails.root.join('config', 'stripe.yml')))
答案 1 :(得分:3)
答案会有点迟,但我刚才偶然发现了类似的问题;)
你可以使用YAML::load_file
,它需要文件名作为参数。