Конфигурация пользовательских рельсов

Какой лучший способ создать пользовательский раздел конфигурации для приложения rails? в идеале я бы хотел, чтобы конечный результат был вызовом api вроде:

Rails.configuration.foo.bar
Rails.configuration.foo.baz

например.

Rails.configuration.stackoverflow.api_key
Rails.configuration.stackoverflow.api_secret

и я бы сохранил конфигурацию stackoverflow в каком-то файле .rb(config/initializers?), и у меня, очевидно, были бы другие, похожие на имена, помещенные в Rails.configuration

Ответ 1

То, что вы ищете, это ActiveSupport:: OrderedOptions.

Он используется рельсами внутри для установки пространства имен config. Это позволяет сделать что-то вроде этого, в config/application.rb:

module MyApp
  class Application < Rails::Application
    # ...
    config.foo = ActiveSupport::OrderedOptions.new 
    config.foo.bar = :bar
  end
end

Затем вы можете восстановить его обычным способом:

Rails.configuration.foo.bar

Если вы хотите, чтобы это было специфичным для среды, вы также можете использовать его в config/environments/*.rb, а не config/application.rb.

Ответ 2

В Rails 4 лучше использовать custom-configuration.

$ Rails.configuration.x.class
# Rails::Application::Configuration::Custom < Object

Rails.application.configure do    
  # custom configuration section
  config.x.foo.bar = "foo.bar"
end

$ Rails.configuration.x.foo.bar
# "boo.bar"