YAML.load никогда не возвращается в инициализаторе Rails - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь загрузить файл конфигурации yaml во время инициализации моего приложения Rails 3.1, и вызов 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 никогда не возвращается. Если я выполняю трассировку стека, кажется, что она застряла в строке 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

Ответы [ 2 ]

3 голосов
/ 21 ноября 2012

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

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

3 голосов
/ 20 февраля 2012

Тьфу, видимо, мне просто нужно было явно прочитать файл.Я изменил это:

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

на это:

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