This extension is part of the Sinatra::Contrib project. Run gem install sinatra-contrib to have it available.
Sinatra::ConfigFile is an extension that allows you to load
the application's configuration from YAML files. It automatically
detects if the files contain specific environment settings and it will use
those corresponding to the current one.
You can access those options through
settings within the
application. If you try to get the value for a setting that hasn't been
defined in the config file for the current environment, you will get
whatever it was set to in the application.
Once you have written your configurations to a YAML file you can tell the extension to load them. See below for more information about how these files are interpreted.
For the examples, lets assume the following config.yml file:
greeting: Welcome to my file configurable application
require "sinatra" require "sinatra/config_file" config_file 'path/to/config.yml' get '/' do @greeting = settings.greeting haml :index end # The rest of your classic application code goes here...
require "sinatra/base" require "sinatra/config_file" class MyApp < Sinatra::Base register Sinatra::ConfigFile config_file 'path/to/config.yml' get '/' do @greeting = settings.greeting haml :index end # The rest of your modular application code goes here... end
Config File Format
In its most simple form this file is just a key-value list:
foo: bar something: 42 nested: a: 1 b: 2
But it also can provide specific environment configuration. There are two ways to do that: at the file level and at the settings level.
At the settings level (e.g. in 'path/to/config.yml'):
development: foo: development bar: bar test: foo: test bar: bar production: foo: production bar: bar
Or at the file level:
foo: development: development test: test production: production bar: bar
In either case,
settings.foo will return the environment name,
settings.bar will return
If you wish to provide defaults that may be shared among all the environments, this can be done by using a YAML alias, and then overwriting values in environments where appropriate:
default: &common_settings foo: 'foo' bar: 'bar' production: <<: *common_settings bar: 'baz' # override the default value