Heroku Review Apps: copy DB to review app
I ran into this same issue and here is how I solved it.
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 ispostgresql://username:password@host:port/db_name
.In your
app.json
file make sure to copy that variable over.In your
app.json
provision a new database which will set theDATABASE_URL
environment variable.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" }}