From time to time using Ruby or even more often using Ruby on Rails, I need additional configuration with some secret API keys. I don’t want to save those data in the git repository, but it is too early to put them in the database. In this case, environment variables can do the trick. You put sensitive data to the .env
file, and you don’t track this file in the git repository. We’re done! Not exactly, in my case. I wanted to have the structured data in one file. So I used the environment variable together with YAML (recursive acronym from words YAML Ain’t Markup Language) file and ERB (Embedded Ruby). Let me show you how this looks like.
I put my configuration related to Stripe accounts in one YAML file.
new_york:
name: 'New York Cafe'
token: <%= ENV.fetch('NEW_YORK_TOKEN') %>
secret_api_key: <%= ENV.fetch('NEW_YORK_API_KEY') %>
los_angeles:
name: 'Los Angeles Cafe'
token: <%= ENV.fetch('LOS_ANGELES_TOKEN') %>
secret_api_key: <%= ENV.fetch('LOS_ANGELES_API_KEY') %>
As you can see, I used environment variables that will be injected by using ERB
. Now I only need to get the configuration with all needed data. To do that, I created a method that loads the data for me. In my case, it was a class method.
class StripeAccount
def self.configuration
YAML.safe_load(ERB.new(File.read('path_to_my_file.yml')).result)
end
...
end
Whenever I need this configuration, I run code:
StripeAccount.configuration['new_york']['name']
=> "New York Cafe"
Of course, if you will use that configuration often, it is better to not load them each time. Just store the configuration, for example, in some variables.
Need help?
If you're looking for a Ruby developer with over a decade of experience, don't hesitate to contact me.
I have experience in a variety of domains, with a focus on short user feedback loops and teamwork. I can help you build a great product.