postgresql - postgres - Aplicaciones de revisión de Heroku: copie la base de datos para revisar la aplicación
heroku postgres tutorial (3)
Me encontré con este mismo problema y así es como lo resolví.
Configure la url de la base de datos de la que desea copiar como variable de entorno en la aplicación base para la interconexión. En mi caso, esto es
STAGING_DATABASE_URL
. El formato de url espostgresql://username:password@host:port/db_name
.En su archivo
app.json
, asegúrese de copiar esa variable.En su aplicación
app.json
una nueva base de datos que establecerá la variable de entornoDATABASE_URL
.Utilice la siguiente secuencia de comandos para copiar en la base de datos
pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL
pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL
Aquí está mi archivo app.json
para referencia:
{
"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"
}
]
}
Intentando automatizar totalmente las aplicaciones de revisión de Heroku (beta) para una aplicación. Heroku quiere que usemos db/seeds.rb
para sembrar el DB de la instancia recientemente spun up.
No tenemos un db/seeds.rb
con esta aplicación. Nos gustaría configurar un script para copiar el DB existente del padre actual (en etapas) y usarlo como el DB para la nueva aplicación bajo revisión.
Esto puedo hacerlo manualmente:
heroku pg:copy myapp::DATABASE_URL DATABASE_URL --app myapp-pr-1384 --confirm myapp-pr-1384
Pero no puedo entender cómo obtener el nombre de la aplicación que Heroku crea en el script de post-implementación .
¿Alguien ha intentado esto y sabe cómo podría ser automatizado?
Una alternativa es compartir la base de datos entre las aplicaciones de revisión. Puedes heredar DATABASE_URL
en tu archivo app.json
.
PD: Esto es suficiente para mi caso, que es un equipo pequeño, tenga en cuenta que tal vez no sea suficiente para el suyo. Y mantengo mis datos de producción y prueba (o en etapas, o dev, como lo llames) separados.
Alternativamente: Otra solución usando pg_restore, gracias a 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"
}
}