簡體   English   中英

YAML.load永遠不會在Rails初始化程序中返回

[英]YAML.load never returns in Rails initializer

我正在嘗試在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

答案有點遲,但是我剛才偶然發現了類似的問題;)

您可以使用YAML::load_file ,它將filename作為參數。

gh,顯然我只需要顯式讀取文件。 我改變了這個:

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

對此:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM