Pregunta

Estoy tratando de cargar un archivo de configuración YAML durante la inicialización de mi aplicación Rails 3.1, y la llamada a yaml.load nunca devuelve. Aquí está mi archivo inicializador:

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

Y aquí está mi archivo stripe.yml:

default: &default
  api_key:    test
  public_key: test

development:
  <<: *default

test:
  <<: *default

production:
  api_key:    prod
  public_key: prod

Por alguna razón, el YAML.load llamar nunca regresa. Si realizo un rastro de pila, parece estar atascado en la línea 135.RB 135. Lo interesante es que cuanto más tiempo deje que mi aplicación se repita antes de romperse, más llamadas a la línea 135 aparecen.

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

También he intentado usar explícitamente Psych en lugar de usar SYCK, pero sin suerte. (Termina colgando también).

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

Solución

Ugh, aparentemente solo necesitaba leer explícitamente el archivo. Cambié esto:

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

a esto:

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

Otros consejos

La respuesta será un poco tarde, pero me he topado con un problema similar en este momento;)

Podrías usar YAML::load_file, que espera el nombre del archivo como argumento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top