2016-01-17 2 views
3

Я использую Rails 4, и я хотел бы, чтобы использовать функциональные возможности пользовательской настройки, как описано здесь:Rails пользовательские конфигурации возвращают пустой хеш

http://guides.rubyonrails.org/configuring.html#custom-configuration

Я создал файл следующих YA (config\prefs.yml):

development: 
    password: test 

И я добавил это к моему config/application.rb:

module MyApp 
    class Application < Rails::Application 
    # ... 

    config.x.prefs = Rails.application.config_for(:prefs) 
    end 
end 

Когда я иду в консоли рельсы, я получаю это:

> Rails.configuration.x.prefs 
=> {} 

Почему не Rails правильно загрузки конфигурации?

+0

При запуске 'Rails.env' это он показывает' "развитие" 'или что-то еще? Если вы по какой-то причине не работаете в среде разработки, тогда, когда он устанавливает хеш-префикс, он будет пустым. – Genzume

ответ

6

Я предполагаю следующее:..

  • Вы имеете Spring камень в комплекте
  • пользовательской конфигурации каким-то образом инициализируется в состоянии он находится в настоящее время в (т.е. пусто)
  • config\prefs.yml не отслеживается весной, поэтому он не знает, что необходимо перезагрузить среду.

Если я правильно, вы просто должны создать инициализатору со следующим кодом:

Spring.watch "config/prefs.yml" 

И, конечно же, вам придется перезагрузить консоль каждый раз, когда конфигурация изменяется. Мне удалось воспроизвести и решить вашу проблему, поэтому я надеюсь, что это поможет.

+0

'reload!' - отличный способ быстро перезагрузить консоль. – blnc

+0

Прошу прощения за то, что вернусь к этому поздно, я путешествовал. Именно по этой причине у меня была эта проблема, вы совершенно правы. Я добавил вашу строку в 'config/spring.rb', и все работает правильно. Кстати, команда @blnc 'reload!' Не работает. – hattenn

+0

@hattenn работает для обновления модели, подумал, что это может произойти весной – blnc

0

Стараюсь код на моей машине и работает нормально, я думаю, может быть проблема с конфигурацией вы сделали в config/application.rb или вам необходимо перезагрузить рельсы консоли с помощью команды перегрузочной reload!

, что моя конфигурация для config/application.rb

require File.expand_path('../boot', __FILE__) 

require 'rails/all' 

# Require the gems listed in Gemfile, including any gems 
# you've limited to :test, :development, or :production. 
Bundler.require(*Rails.groups) 

module WSApp 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
    # config.time_zone = 'Central Time (US & Canada)' 

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
    # config.i18n.default_locale = :de 

    # Do not swallow errors in after_commit/after_rollback callbacks. 
    config.active_record.raise_in_transactional_callbacks = true 
    config.x.prefs = Rails.application.config_for(:prefs) 
    end 
end 

, что ваш файл prefs.yml

development: 
    password: test 

здесь является результат

enter image description here

Смежные вопросы