Heroku Review Apps: copy DB to review app Heroku Review Apps: copy DB to review app heroku heroku

Heroku Review Apps: copy DB to review app


I ran into this same issue and here is how I solved it.

  1. Set up the database url you want to copy from as an environment variable on the base app for the pipeline. In my case this is STAGING_DATABASE_URL. The url format is postgresql://username:password@host:port/db_name.

  2. In your app.json file make sure to copy that variable over.

  3. In your app.json provision a new database which will set the DATABASE_URL environment variable.

  4. Use the following script to copy over the database pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL

Here is my app.json file for reference:

{  "name": "app-name",  "scripts": {    "postdeploy": "pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rake db:migrate"  },  "env": {    "STAGING_DATABASE_URL": {      "required": true    },    "HEROKU_APP_NAME": {      "required": true    }  },  "formation": {    "web": {      "quantity": 1,      "size": "hobby"    },    "resque": {      "quantity": 1,      "size": "hobby"    },    "scheduler": {      "quantity": 1,      "size": "hobby"    }  },  "addons": [    "heroku-postgresql:hobby-basic",    "papertrail",    "rediscloud"  ],  "buildpacks": [    {      "url": "heroku/ruby"    }  ]}


An alternative is to share the database between review apps. You can inherit DATABASE_URL in your app.json file.

PS: This is enough for my case which is a small team, keep in mind that maybe is not enough for yours. And, I keep my production and test (or staging, or dev, whatever you called it) data separated.


Alternatively:Another solution using pg_restore, thanks to https://gist.github.com/Kalagan/1adf39ffa15ae7a125d02e86ede04b6f

{  "scripts": {    "postdeploy": "pg_dump -Fc $DATABASE_URL_TO_COPY | pg_restore --clean --no-owner -n public -d $DATABASE_URL && bundle exec rails db:migrate"  }}