2015-03-14 5 views
0

В application.rb я попытался прочитать YAML файл:Почему я получаю undefined метод `each '?

config.before_configuration do 
    env_file = File.join(Rails.root, 'config', 'local_env.yml') 
    YAML.load(File.open(env_file)).each do |key, value| 
    ENV[key.to_s] = value 
     end if File.exists?(env_file) 
    end 

, но я получаю эту ошибку:

/var/www/config/application.rb:26:in `block in <class:Application>': undefined method `each' for #<String:0x00000007afb7f0> (NoMethodError) 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.1.6/lib/active_support/lazy_load_hooks.rb:36:in `call' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.1.6/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.1.6/lib/active_support/lazy_load_hooks.rb:28:in `block in on_load' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.1.6/lib/active_support/lazy_load_hooks.rb:27:in `each' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activesupport-4.1.6/lib/active_support/lazy_load_hooks.rb:27:in `on_load' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/railties-4.1.6/lib/rails/railtie/configuration.rb:53:in `before_configuration' 
     from /var/www/config/application.rb:24:in `<class:Application>' 

Любую идею?

EDIT

Мой файл YAML:

LOAD_JS_FROM_AMAZON:no 
RACK_ENV:production 
S3_BUCKET_NAME:bucket_name 
S3_CMS_BUCKET_NAME:cms_bucket_name 
+1

Похож на 'YAML.load (File.open (env_file))' возвращает 'String' не' Hash'. Можете ли вы опубликовать свой файл yaml? – spickermann

+0

См. Править выше – simo

ответ

2

YAML.load(File.open(env_file))

Ваш YAML возвращается в String не Hash

Вам нужно пространство между двоеточием и значением:

LOAD_JS_FROM_AMAZON: no 
RACK_ENV: production 
S3_BUCKET_NAME: bucket_name 
S3_CMS_BUCKET_NAME: cms_bucket_name 
+0

Спасибо, не могу ли я использовать логические значения в yaml? Я получил эту ошибку: никакого неявного преобразования true в String (TypeError) – simo

+0

нет проблем с использованием booleans в yaml. Просто используйте «key: true» или «key: false» –

+1

. Я обнаружил, что в приведенном выше коде есть ENV [key.to_s] = значение.to_s – simo