The choice is yours
Easy-peasy external settings for your Rails app.
# Gemfile
gem 'scoped_choices'
In your app initializer block:
# Rails.configuration.my_engine...
config.from_file_with_scope 'settings.yml', "my_scope"
This will read configuration from "config/settings.yml" and, additionally, "settings.local.yml" if it exists. You should check the main file into version control, but not the ".local" file which is to be used for per-machine configuration: tweaks in development or private keys in production, for example.
# .gitignore
config/settings.local.yml
Configuration files can contain ERB; this is useful for reading in Heroku configuration. For example:
# settings.yml
defaults: &defaults
secret_token: <%= ENV['COOKIE_SECRET'] %>
heroku: <%= !!ENV['HEROKU_TYPE'] %>
mongodb:
uri: <%= ENV['MONGOHQ_URL'] %>
development:
<<: *defaults
test: &testing
<<: *defaults
secret_token: <%= "banana" * 5 %>
mongodb:
database: myapp_test
cucumber:
<<: *testing
The ".local" file can contain overrides for your development environment:
# settings.local.yml
development:
mongodb:
database: myapp_dev
Finally, the config keys can be read in your app as such:
Rails.configuration.my_scope.heroku #=> false
Rails.configuration.my_scope.mongodb.database #=> "myapp_dev"