Yaml.Load nunca regresa en Rails Initializer
-
28-10-2019 - |
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
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.