RrxConfig
Ruby on Rails application configuration support.
Installation
Install the gem and add to the application's Gemfile by executing:
$ bundle add rrx_config
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install rrx_config
Usage
This gem loads runtime application configuration from JSON provided by an external source.
Configurations are stored as immutable Ruby Data
objects.
For example, with the JSON config
{
"some_config": {
"value": "foo"
},
"other_config_value": "bar"
}
The config would be accessed like this:
def my_code
if RrxConfig.some_config.value == 'foo'
do_something RrxConfig.other_config_value
end
end
You can test for optional values using standard mechanisms:
optional_stuff if RrxConfig.respond_to?(:optional_thing)
deep_optional_stuff if RrxConfig.optional_thing.include?(:deep_thoughts)
optional_flag = RrxConfig.try(:optional).try(:flag) || DEFAULT_FLAG
# Root-level configs can also be tested with the xxxx? syntax
optional_stuff if RrxConfig.optional_thing?
Configuration Sources
Environment
Set the RRX_CONFIG
environment variable to the required JSON configuration
AWS
Loads configuration from an AWS secret that contains the required JSON configuration. Recommended when deploying on AWS. By default will use the implicit AWS context that is assigned by the instance role.
Set the RRX_CONFIG_AWS_SECRET
environment variable to the name of the secret to read.
For local integration testing, set RRX_AWS_PROFILE
to use local AWS credentials. The profile must be
configured in the local AWS client (typically ~/.aws/credentials
).
Local File Configuration
For development purposes, the gem will also check for the following files:
-
{rails_root}/spec/spec_config.json
ifRAILS_ENV=test
{rails_root}/local_config.json
Database Support
If the loaded config contains a root-level database
item then it will be used to configure the
application database instead of database.yml
.
AWS RDS IAM Authentication
The gem also adds support for AWS RDS authentication using IAM to MySQL/MariaDB databases. If the RDS instance
and user account has been configured correctly, replace the password
argument with iam: true
. This is supported
using the database
configuration or database.yml
.
The gem will automatically download the required CA certificates and set the necessary client options.
Using JSON configuration:
{
"database": {
"adapter": "mysql2",
"host": "rds-db-address...rds.amazonaws.com",
"port": 3306,
"username": "my_app_user",
"iam": true
}
}
Using database.yml
:
production:
adapter: mysql2
host: rds-db-address...rds.amazonaws.com
port: 3306
username: my_app_user
iam: true
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/rails-rrx/rrx_config. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the RrxConfig project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.