Ever since I started working with my client, I had to deploy to staging and then production. On staging, even if I deploy a breaking change or I mess up something in during deployment, I have time to fix it, as nobody but me and my client will see the mess I have created.

But production is different - I have to be sure that things are going to work after I deploy. So I decided to create a quick checklist which I can follow every time I deploy my Rails app to production. Take notes.

I will assume that you are doing database migrations.

1. Put your app to maintenance mode

It is not necessary to do this if you are not doing any database migrations.

But if you are, you don’t want any information to be lost during the deployment process. It is easy to turn maintenance mode on - head over Heroku -> Settings -> Maintenance Mode -> Switch ON.

2. Make a backup of your Postgres database

Go to your production project on Heroku -> Resources -> Postgres database -> Durability -> Create a manual backup -> Download

This will ensure you that you have the latest version of your database after you have turned maintenance mode on. Even if you do something terribly wrong, you can go back and upload the latest stable version of your database. Then you can try again!

3. Merge develop to master

First checkout to master

git checkout master

and then merge from develop to master

git merge develop

Hopefully there won’t be any merge conflicts.

4. Push to heroku

git push heroku master

If you have multiple heroku apps (for example, staging and production), you will need to specify the name of the app using --app app_name.

To get a list of your heroku apps and their names, run

heroku apps

5. Run migrations

Now that you have pushed, you can migrate

heroku run rake db:migrate

6. Run any tasks

If you have any tasks that need to be ran, now it is a good opportunity to do so.

heroku run rake my_namespace:task_name

7. Update environment variables

Now that you have pushed your commits, migrated and run your tasks, you can go in your settings panel on Heroku, press Reveal Config Vars and add any new environment variables that you might have added since your last deployment.

8. Turn off maintenance mode

Now that everything is ready, you can go in your settings panel and turn the maintenance mode off in the same way you turned it on.

9. Test that the new feature is working

Everything should be up and running. But I always like to go and test the app is working as expected.

That’s it! You can now push to deployment with confidence!