Domanda

Sto cercando di caricare un file di configurazione YAML durante l'inizializzazione dell'app Rails 3.1 e la chiamata a Yaml.Load non ritorna mai. Ecco il mio file di inizializzatore:

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

Ed ecco il mio file stripe.yml:

default: &default
  api_key:    test
  public_key: test

development:
  <<: *default

test:
  <<: *default

production:
  api_key:    prod
  public_key: prod

Per qualsiasi motivo, il YAML.load Chiama Never Returns. Se eseguo una traccia dello stack, sembra essere bloccato sulla linea Syck.rb 135. La cosa interessante è che più lascio che la mia app si sieda prima di rompere, più chiamate alla linea 135 compaiono.

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

Ho provato a usare esplicitamente anche Psych invece di usare SYCK, ma senza fortuna. (Finisce anche per sospendere.)

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

Soluzione

Ugh, a quanto pare avevo solo bisogno di leggere esplicitamente il file. Ho cambiato questo:

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

a questo:

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

Altri suggerimenti

La risposta sarà un po 'in ritardo, ma mi sono imbattuto in un problema simile proprio ora;)

Potresti usare YAML::load_file, che si aspetta il nome file come argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top