env_config

Simple configuration management with environment variables

MIT License

Downloads
8.4K
Stars
4
Committers
1

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']