Today, I really want to start something different which I believe would be very helpful to new Rails developers. I remember the time when I first came to Rails world, I was impressed with its amazing community and gem ocean. I could find almost every thing I needed which has been written by other developer and delivered free on the Internet through something called "gem".
The main purpose of this series is to help new Rails developers know which good gem they can consider to integrate into their system to solve their issues. This is solely based on my own experience and it might be incorrect for some people, but trust me, these list works for me :).
And the first gem I want to introduce today is Figaro
Developed by: Steve Richert
When to use?
Typically, you could have many environments to run your Rails app. Three popular ones are: development, test and production. Of course, there could be more such as staging, integration, etc. Each environment could use different configuration such as different host names, emails or AWS Keys. In addition, there are many sensitive information which you don't want to commit into Github such as email password, database password, etc. If I hire other developers to work in my project, I would not them to know my secret email address, you know. In those cases, it's best to store them as environment variables on your deployment server and access to these values through
ENV hash in your Rails app
However, it is inconvenient if you have to set environment variables each time you start Rails server in your development machine. Imagine how hard it is to start your Rails application like this
AWS_ACCESS_KEY_ID=XXXXX AWS_SECRET_KEY=XXXXX rails s
Figaro is here to help you. I recommend this gem to new Rails developer because I still do not forget the moment when I accidentally committed my email password for testing into shared Github repository and every other developers knew my email password. I then had to change my password instantly and I definitely do not want you to step on my foot :).
How to use
After installing this gem into your application, you can create a config file called
application.yml which contains all environment variables you want to exposure in your app. And you don't have to commit this file into Github, it is just for your local machine (add it to .gitignore). For example, the content of my
application.yml looks like this:
And now, I can use these two variables in my app through
ENV hash, like this:
Furthermore, I can also set different values for different environments, like this:
development: AWS_ACCESS_KEY_ID=XXXXX AWS_SECRET_KEY=XXXX test: AWS_ACCESS_KEY_ID=11111 AWS_SECRET_KEY=11111 production: AWS_ACCESS_KEY_ID=222222 AWS_SECRET_KEY=222222
Now, depending on the current mode you are running, the value of
ENV["AWS_SECRET_KEY"] will be different accordingly.
But hold on, how to let other developers know which environment variables are available in app if you do not commit
application.yml? That's easy, you just need to create and commit a similar file called
application.example.yml which contains just only names of the variables, the value will be set by each individual developers. An example of
Note for Capistrano users
If you are deploying your Rails app with Capistrano, this
application.yml file should be created manually when setting up the project on server, which is similar to
database.yml file. And when you add new variables, remember to go to server and change the content of
application.yml file accordingly.
Thank you for your attention. Looking forward to introducing next gem. Happy coding!