2

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)>'
...

Syck を使用する代わりに Psych を明示的に使用しようとしましたが、うまくいきませんでした。(それもぶら下がってしまいます。)

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

2 に答える 2

3

うーん、明らかにファイルを明示的に読み取る必要がありました。私はこれを変更しました:

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

これに:

YAML.load(File.open(Rails.root.join('config', 'stripe.yml')))
于 2012-02-20T15:10:52.167 に答える