Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.


Reviewed by Hound

Shell commands for development, staging, and production parity for Heroku apps.


gem install parity

Or bundle it in your project:

gem "parity"

Parity requires these command-line programs:



Backup a database:

production backup
staging backup

Restore a production or staging database backup into development:

development restore production
development restore staging

Or, if restore-from reads better to you, it's the same thing:

development restore-from production
development restore-from staging
  • Note that the restore command will use the most recent backup (from staging or production). You may first need to create a more recent backup before restoring, to prevent download of a very old backup.

Push your local development database backup up to staging:

staging restore development

Deploy main to production (note that prior versions of Parity would run database migrations, that's now better handled using Heroku release phase):

production deploy

Deploy the current branch to staging:

staging deploy

Note that deploys to non-production environments use git push --force.

Open a console:

production console
staging console
pr_app 1234 console

Migrate a database and restart the dynos:

production migrate
staging migrate
pr_app 1234 migrate

Tail a log:

production tail
staging tail
pr_app 1234 tail

The scripts also pass through, so you can do anything with them that you can do with heroku ______ --remote staging or heroku ______ --remote production:

watch production ps
staging open

You can optionally parallelize a DB restore by passing --parallelize as a flag to the development or production commands:

    development restore-from production --parallelize


Parity expects:

  • A staging remote pointing to the staging Heroku app.
  • A production remote pointing to the production Heroku app.
heroku git:remote -r staging -a your-staging-app
heroku git:remote -r production -a your-production-app
  • There is a config/database.yml file that can be parsed as YAML for ['development']['database'].


If you deploy review applications with Heroku pipelines, run commands against those applications with the pr_app command, followed by the PR number for your application:

pr_app 1234 console

This command assumes that your review applications have a name derived from the name of the application your staging Git remote points at.


If you have Heroku environments beyond staging and production (such as a feature environment for each developer), you can add a binstub to the bin folder of your application. Custom environments share behavior with staging: they can be backed up and can restore from production.

Using feature environments requires including Parity as a gem in your application's Gemfile.

gem "parity"

Here's an example binstub for a 'feature-geoff' environment, hosted at

#!/usr/bin/env ruby

require "parity"

if ARGV.empty?
else"feature-geoff", ARGV).run


Please fill out our issues template if you are having problems.


Please see for details.

Version History

Please see the releases page for the version history, along with a description of the changes in each release.


See guidelines in for details


Parity is © 2013-2021 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.

About thoughtbot


Parity is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We are passionate about open source software. See our other projects. We are available for hire.