Search code examples
ruby-on-railsrubyherokuruby-on-rails-3.2staging

Adding a staging environment to the workflow


I currently have two environments in which I work: development locally and production on Heroku.

I would like to add a staging environment on Heroku to see that everything goes as expected before pushing the app live to users. Preferably, the staging environment should have the exact same settings and data as the production environment.

What are the steps needed to accomplish the above?


Solution

  • First the predispositions, i like to have my heroku git remotes set up as staging and production so you can easily use git push staging/production to deploy to each one of them. I'll be using that setup to explain how to make a staging env.

    1. create a config/environments/staging.rb which you will copy off `config/environments/production.rb'
    2. add a database.yml entry for the staging database(not really needed for heroku but can't hurt)
    3. Backup your .env file (if you have it)
    4. Install heroku-config plugin by heroku plugins:install git://github.com/ddollar/heroku-config.git
    5. pull your environment settings from heroku(production server) with heroku config:pull --remote production
    6. make changes to the .env file and don't forget to add these values to the config: RACK_ENV=staging RAILS_ENV=staging so it will use the staging environment configuration.
    7. fork a heroku environment with heroku fork -a production staging (those are heroku appnames you want instead of production/staging)
    8. Do a `heroku config:push --remote staging'
    9. Be sure to deploy the code to staging env properly

    You can also read this tutorial, i think i used it to get started with multiple envs on heroku: https://devcenter.heroku.com/articles/multiple-environments#managing-staging-and-production-configurations