<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=706355809571598&amp;ev=PageView&amp;noscript=1"> Figaro gem - Simple, Heroku-friendly Rails app configuration using ENV and a single YAML file

Even if you’re kind enough to offer your hard work to the community (as a just reward for all the pretty gems we use every day), it quickly comes to your mind that some parts of your credentials need to be kept private (even for an open source project). These risks can be avoided by setting ENV variables (key/value) on your local environment and calling them in your code.

config/initializers/credentials.rb
1
2
3
MyApp.app_id = ENV["MY_APP_ID"]
MyApp.key = ENV["MY_APP_KEY"]
MyApp.secret = ENV["MY_APP_SECRET"]

As an alternative, that could furthermore allow you to set environment specific variables, comes the figaro gem.

Simply add gem "figaro" to your gemfile and run the bundle install command.

Next step is to launch rails generate figaro:install which will create the config/application.yml file and add it into your .gitignore.

You don’t even need to update your initialization file, the gem handle the ENV variable creation and as mentioned earlier in this post, you can now specify some values according to the environment.

config/application.yml
1
2
3
4
5
6
7
MY_APP_ID: 111111
development:
 MY_APP_ID: 222222
staging:
 MY_APP_ID: 333333
production:
 MY_APP_ID: 444444

Let’s now deploy it !

Either with capistrano:

And then you should consider adding something like this into your deploy.rb script:

1
2
3
4
5
6
namespace :deploy do
 desc 'Symlink shared directories and files'
 task :symlink_directories_and_files do
 run "ln -s #{shared_path}/config/application.yml #{release_path}/config/application.yml"
 end
end

Or, if you’re using platform like Heroku, the gem includes a nice Rake task which allows you to set all the needed ENV variables:

rake figaro:heroku

For further information: