Changes
- You can use the [config.x](https://guides.rubyonrails.org/configuring.html#custom-configuration) configuration in combination with `config_for` to configure global settings for your Rails 4.2+ application.
- ## Example
- In your `config/application.rb` assign the settings from e.g. `config/settings.yml` as follows:
- ```ruby
- module FooApplication
- class Application < Rails::Application
- config.x.settings = config_for(:settings)
- end
- end
- ```
- The `config/settings.yml` might look as follows:
- ```yml
- shared:
- email: info@example.com
- google_analytics:
- container: UA-123456-12
- production:
- email: production@example.com
- ```
- Keys under the `shared` namespace are shared between all environments. Environment specific configs will override those shared values. Afterwards you can access these settings with e.g. `Rails.application.config.x.settings.google_analytics.fetch(:container)` or `Rails.configuration.x.settings.google_analytics.fetch(:container)` in your application.
- ## Additional notes
- * The `config.x` is a dedicated namespace and helps you to avoid collisions with config options related to Rails itself.
- * The `config.x` returns an [OrderedOptions](https://api.rubyonrails.org/classes/ActiveSupport/OrderedOptions.html) object for the first two levels, but not deeper.
- * This approach might be preferred over global constants like `config/constants/settings.rb`:
- * It can be used in the Rails Configuration itself and all initializers.
- * It allows to write environment dependent settings.
-* Undefined keys return `nil` if not present e.g. `Rails.application.config.foobar => nil`- +
- +* Undefined keys return `nil` if not present e.g. `Rails.application.config.foobar => nil`.
- +* If you need to ensure the value of key is not blank, use the bang method e.g. `Rails.application.config.foobar!`. This is recommended for a value that must exist in any case (no blank value).
- +* For many other cases it more useful to use `#fetch` instead of the attribute accessors to ensure you have no typos in your config e.g. `Rails.application.config.fetch(:foobar)`. You might also want to chain the method calls for nested configs e.g. `Rails.application.config.fetch(:foobar).fetch(:bar)`. This approach allows you to have `''`, `true`, `false` and `nil` in your config.
- +
Posted by Emanuel to makandra dev (2025-02-26 09:36)