In my current project in Ruby on Rails I need to store application specific configuration. There are several approaches I’ve found: AppConfig plugin, several methods described on HowtoAddYourOwnConfigInfo wiki page, but neither one looks “config-like”. Me with my friend, Alexey Kovyrin, discovered all of them and decided to use YAML-file. Ideal configuration, I think, file looks like following:
support_email: admin@myhost.com
root_url: myhost.com
photos_max_number: 6
production:
email_exceptions: true
development:
root_url: localhost:3000
photos_max_number: 10
In this example you can see three sections: common will be used as base configuration for all environments, production and development - environment specific options. Possible sections are production, development, and testing, or any other custom environment name. I’ve placed this file in config/config.yml and added following code to config/environment.rb:
require 'yaml'
config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)
Now I’m able to use constructions like AppConfig.support_email and AppConfig.root_url. Looks like I’ve kept all my configs as DRY as possible
Русский
English