Для Rails, как получить доступ или распечатать конфигурационные переменные (в качестве эксперимента или тестирования/отладки)
Например, в config/environments/production.rb
в приложении Rails 3 есть
config.serve_static_assets = false
и многих переменных. Как они могут быть распечатаны в целом (возможно, в объекте вместо указания каждого по одному) (распечатывать в представлении, таком как индекс FooController #), просто для поиска того, какие типы значений доступны и посмотреть, на что они установлены?
Также, как распечатать значения в файлах .yml
(как хеш и/или в каком-либо конфигурационном объекте?) и в config/initializers
, например, для
MyAppFoo::Application.config.session_store :active_record_store
Я обнаружил, что мы можем распечатать содержимое
ActiveRecord::Base.configurations
но не
ActionController::Base.configurations
Есть ли способы распечатать всю информацию о компонентах MVC?
Ответы
Ответ 1
Большинство элементов конфигурации Rails можно получить через:
Rails.application.config.<your_variable>
Что касается распечатки значений .yml файлов в config, вы должны сделать это сами, потому что Rails загрузит только значения текущей среды из database.yml
, и любые пользовательские файлы конфигурации yml будут только это - обычай. Вот один из способов, которыми вы могли бы загрузить их все...
all_configs = []
Dir[Rails.root.join("config/*.yml")].each {|f| all_configs << YAML.load_file(f) }
Что касается настроек, установленных в инициализаторах, если это опция конфигурации Rails (например, хранилище сеансов, которое вы указали в качестве примера), то она будет доступна через Rails.application.config
. Если нет, (например, конфигурация для драгоценного камня), вам придется вручную найти эти настройки из классов драгоценных камней.
Ответ 2
Вы также можете использовать AppName::Application.config
(где AppName
- имя вашего приложения) для доступа к объекту Rails::Application::Configuration
.
$ AppName::Application.config == Rails.application.config
true
Ответ 3
Как отмечают idlefingers, для более новых версий рельсов Rails.application.config.my_variable
должен получить то, что вы ищете.
Однако, если это не работает, потому что вы застряли в старой версии Rails (2.3 и т.д.), вы можете использовать константу ENV
, например: ENV['my_variable']