In Gemfile: gem 'figgy' Configure (say, in a Rails initializer): APP_CONFIG = Figgy.build do |config| config.root = Rails.root.join('etc') # config.foo is read from etc/foo.yml config.define_overlay :default, nil # config.foo is then updated with values from etc/production/foo.yml config.define_overlay(:environment) { Rails.env } end Access it as a dottable, indifferent-access hash: APP_CONFIG["foo"]["some_key"] APP_CONFIG[:foo].some_key APP_CONFIG.foo[:some_key]