2012-02-20 5 views
2

Я пытаюсь загрузить файл конфигурации yaml во время инициализации моего приложения Rails 3.1, и вызов YAML.load никогда не возвращается. Вот мой инициализатор файл:YAML.load никогда не возвращается в Rails initializer

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 вызов никогда не возвращается. Если я выполняю трассировку стека, она, похоже, застряла на линии 135 syck.rb. Интересно, чем дольше я позволяю своему приложению сидеть до взлома, тем больше вызовов на строку 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

Эта бывшая линия работает для меня, не уверен, почему не для вас –

3

Ответ будет своего рода поздно, но я наткнулся на подобную проблему только сейчас;)

Вы можете использовать YAML::load_file, который ожидает имя файла как аргумент.

Смежные вопросы