At my workplace, I have been taking interviews for hiring, taking RoR interviews mostly. The one thing which I tend to ask nearly everyone is about the deployment process - whether or not they understand them. Since we are looking for someone near 2-3 years of experience with Rails, that’s the kind of people I am setup for an interview with. In my viewpoint, anyone who ever worked on Rails for more than a year and has pushed code into production should know at least the basics of how Rails apps should be deployed on the server.
Below are the observations I have made during interviewing a lot of candidates, all of them having 1-3 years of experience with Rails (they are not mathematically accurate, but a gross approximation):
- Most people (around 4 out of 5) have no idea of how a Rails app can be deployed.
- Some people think ‘nginx’ is an application server. Some think it is what runs Rails apps.
- Very few people have the understanding and importance of Rake!
- Most people I talked to were using some kind of a ‘script’, was it a bash script, or capistrano or something else - they couldn’t differentiate. About 40% of the guys I interviewed had no idea of how they were deploying their apps. A couple of them appeared to have Docker+Kubernetes as the answer to everything in the world related to apps, including a RoR app deployment, yet they did not know what Docker and Kubernetes were used for in more precise terms.
- At least half of the people do not know what an ‘application server’ is, how it’s different from a ‘web server’ and surprisingly enough they did not know which application server or web server they were using.
- A number of people do not know which application server is being used on their development machines.
- Almost 3/5 people could not answer “what kind of server is Puma?”
There are other things that startle me when talking to people about their understanding of Rails but when it comes to deployment, a lot of people falter on it. The general pattern is that either they do not understand their tools, or the parts of a Rails application, or the stack that Rails uses and needs or they don’t understand about environments. There is a lot of knowledge gap in most 1-3 year experienced guys over Rails’ deployment procedure.
Is ignorance bliss?
Ignorance might be bliss in some cases. But in most spheres, including your work as a programmer, it is sometimes important to know about your stack. What if a critical deployment fails on your server, a person who knows not how to get a production app up and running is not of much use, and believe me, things like that – deployments failing – they happen.
There can be an excuse for not having done the setup in the earlier stages, or that it’s done by the Ops team, or that kubernetes handles it. But that’s no reason for not learning how to do it yourself.
This guide tries to cover all parts of deployment procedure including server setup. I truly hope that you will find this guide useful in explaining you the various parts of Rails and how to deploy a Rails app and help you understand how things work. If you think it can be improved, please, please let me know about it in the comments (all articles in the guide should have a comment box below the article).