EnvConfig
This gem is archived and no longer maintained. The rubygem name is released and does not reference this project.
Simple configuration management with environment variables.
Inspired by how Heroku uses environment variables for configs, EnvConfig is a no-magic gem for defining configs in yaml, and loading them into environment variables.
Features
- application.yml can be templated with erb.
- arbitrary namespaced configuration. e.g. development, qa:mac, integration/aws/ci.
- heroku friendly.
- small library, no additional dependencies
Installation
Install the gem, and initialize the configuation yaml and configuration loader.
gem install env_config
# if using Rails
rake env_config:init
# otherwise
env_config init
Example
First we define the configs we want in a yaml file:
# Each key value pair in this file will be read by EnvConfig and set to an
# environment variable. If an environment variable already exists, then it is
# not overridden by default. See EnvConfig.configure for more options.
# shared variables
common: &common
env_config1: 'config1_value'
env_config2: <%= "you can use erb" %>
# environment specifc variables
development:
<<: *common
env_config1: 'config1_override'
test:
<<: *common
# If your app is deployed on Heroku, then production Heroku values will
# override these settings because existing variables are not overridden by
# default. See also: http://devcenter.heroku.com/articles/config-vars
production:
<<: *common
Then in config/initializers/env_config.rb
EnvConfig.configure do |config|
# yaml to read default config variables
config.config_path = 'config/application.yml'
# Whether to override a variable that's already defined in an environment
# variable. Keep to false if using Heroku.
config.override_env = false
# Namespace config values
# For example, to namespace by platform and rails environment
#
# config.namespace_by = "{RbConfig::CONFIG['host_os']}/#{Rails.env}"
#
# Then in your config/application.yml, you can nest your config by the
# namepaces.
#
# darwin11.0.0:
# development:
# var_name: "mac development specific value"
#
config.namespace_by = Rails.env
# Delimiter to split namespaces by when finding scoped config
config.namespace_delimiter = '/'
end
# This actually sets the variables into ENV
EnvConfig.set!
From here, you can access any of your variables via ENV:
ENV['my_config_name']