This GEM allows you to access configuration stores with different adapters. Here're some examples of usage:
# First setup the Config to use the ENV as config store
Diplomat.configure do |config|
config.url = "http://172.17.0.1:8500"
end
Blinkist::Config.env = ENV["RAILS_ENV"]
Blinkist::Config.app_name = "my_nice_app"
Blinkist::Config.adapter_type = :env
Blinkist::Config.error_handler = :strict
my_config_value = Blinkist::Config.get! "some/folder/config"
# This is being translated to ENV["SOME_FOLDER_CONFIG"]
When configured with Blinkist::Config.error_handler = :strict
(as recommended)
reading a configuration entry for which the value is missing
(for example missing enviroment variables) will cause
Blinkist::Config::ValueMissingError
to be raised.
There is also an alternative mode Blinkist::Config.error_handler = :heuristic
which
will raise exceptions only when Blinkist::Config.env == "production"
.
This alternative mode is also the default for compatibility.
If you don't want Blinkist::Config.get!
to scream at you for missing
configuration entries then you canprovide a default value as a second
paramter to get!
:
my_config_value = Blinkist::Config.get! "some/folder/config", "default value"
# If ENV["SOME_FOLDER_CONFIG"] is nil, "default value" will be returned
If you want to refetch a value from the config store, you can set the refetch
parameter to true
.
WARNING: This will cut into our SSM quota on AWS - please use this with caution and behind another way of caching.
See AWS SSM Quota for more information.
my_config_value = Blinkist::Config.get! "some/folder/config", refetch: true
# This will reload the value from the config store, even if it's cached. The re-fetched value will then be cached.
If you want to use Consul's key value store, simply use our diplomat adapter.
The GEM expects consul to listen to http://172.17.0.1:8500
# First setup the Config to use the ENV as config store
Blinkist::Config.env = ENV["RAILS_ENV"]
Blinkist::Config.app_name = "my_nice_app"
Blinkist::Config.adapter_type = ENV["CONSUL_AVAILABLE"] == "true" ? :diplomat : :env
my_config_value = Blinkist::Config.get! "some/folder/config"
# This is will try to get a value from Consul's KV store at "my_nice_app/some/folder/config"
# Here we setting a scope outside of the app
my_config_value = Blinkist::Config.get! "another/config", scope: "global"
# This will replace `my_nice_app` with `global` and try to resolve "global/another/config"
# With :env the scope will simply be ignored
If you want to use EC2's key value store SSM, simply use our aws_ssm adapter. It'll automatically try to decrypt all keys.
The GEM expects the code to run in an AWS environment with properly set up IAM.
Blinkist::Config.env = ENV["RAILS_ENV"]
Blinkist::Config.app_name = "my_nice_app"
Blinkist::Config.adapter_type = ENV["SSM_AVAILABLE"] == "true" ? :aws_ssm : :env
my_config_value = Blinkist::Config.get! "some/folder/config"
# This is will try to get a parameter from SSM at "/application/my_nice_app/some/folder/config"
# You can also preload all parameters to avoid later calls to SSM
Blinkist::Config.preload
Blinkist::Config.preload scope: "global" # in case you need also another scope being preloaded
# Here we setting a scope outside of the app
my_config_value = Blinkist::Config.get! "another/config", scope: "global"
# This will replace `my_nice_app` with `global` and try to resolve "/application/global/another/config"
Add this line to your application's Gemfile:
gem "blinkist-config"
You have to set up the GEM before you can use it. The basic setup requires this
Blinkist::Config.env = "production" || "test" || "development"
Blinkist::Config.app_name = "your_app_name" # Used only with diplomat adapter
Blinkist::Config.adapter_type = :diplomat || :env
It's best to drop a config.rb
into your app and load this file before every other file. In Rails you can link it into your application.rb
require_relative "boot"
require_relative "config"
require "rails"
# ...
You can build this project easily with docker compose.
docker compose run rake
This will execute rake and run all specs by auto correcting the code with StandardRB.
If you're ready to tag a new version, do this
docker compose run gem bump -t -v major|minor|patch
To deploy to rubygems.org do this then
docker compose run gem release
You'll have to have proper rights to access rubygems.org
Bug reports and pull requests are welcome on GitHub at https://github.com/blinkist/blinkist-config.
The gem is available as open source under the terms of the MIT License.