Comment transférer la firebase database de production vers la mise en scène sur Heroku en utilisant pgbackups? Obtenir une erreur

Sur Heroku, j’essaie de copier la firebase database de production dans mon application de transfert en utilisant l’addon pgbackups. J’ai suivi les instructions sur la page addon: https://devcenter.heroku.com/articles/pgbackups

J’ai d’abord capturé la DB:

heroku pgbackups:capture --app production-app 

Ça a marché:

 HEROKU_POSTGRESQL_PURPLE (DATABASE_URL) ----backup---> b238 Capturing... done Storing... done 

Cependant, lorsque j’essaie de le restaurer sur l’application de transfert:

 heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --remote staging 

Je reçois le message d’erreur suivant:

 DATABASE_URL does not match any of your databases ! Could not resolve database DATABASE ! ! Available databases: 

J’ai également essayé de taper l’URL complète:

  heroku pgbackups:url b238 --app production-app heroku pgbackups:restore DATABASE "https://s3.amazonaws.com/..." --remote staging 

et également essayé de nommer l’application (au lieu de –remote staging):

 heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app 

Aucun de ceux-ci n’a fonctionné. Il est intéressant de noter que le message d’erreur indique qu’il n’y a pas de “bases de données disponibles”. Je suppose qu’il fait référence à l’application de mise en scène qui est en effet vide. Si je tape:

 heroku pgbackups 

Je reçois:

  ! No backups. Capture one with `heroku pgbackups:capture`. 

Pour trouver les sauvegardes disponibles (production), je dois taper:

 heroku pgbackups --app production-app 

et je reçois la liste des sauvegardes actuelles. Je ne sais pas si c’est normal ou même si c’est lié au problème, mais j’ai pensé que je devrais le mentionner.

J’ai lu et essayé toutes les réponses sur SO mais rien n’a fonctionné. Des idées?

Mise à jour pour la mi-2017 (dérober la réponse de Takehiro Mouri – simplifier la partie DATABSE_NAME)

Mise à jour mi-2015 …

Le module complémentaire pgbackups est obsolète. Plus de pgbackups:transfer .

Pour copier une firebase database de votre application vers votreappapp_staging :

 # turn off the web dynos in staging heroku maintenance:on -a yourapp-staging # if you have non-web-dynos, do them too heroku ps:scale worker=0 -a yourapp-staging # backup the staging database if you are paranoid like me (optional) heroku pg:backups capture -a yourapp-staging # execute the copy heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging 

Ensuite, une fois terminé, remettez en marche:

 # this is if you have workers, change '1' to whatever heroku ps:scale worker=1 -a yourapp-staging heroku maintenance:off -a yourapp-staging 

(source: https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default )

MISE À JOUR: Cela ne fonctionne plus. Veuillez vous reporter à la réponse de @lucas-nelson ci-dessous.

Donc, les choses sont encore plus faciles maintenant … consultez la commande de transfert dans le cadre de pgbackups

 heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi 

https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups#transfering-databases-between-heroku-applications

Cela a fonctionné à merveille pour que je ramène le code de production sur mon site de stockage.

MISE À JOUR: Vous pouvez exécuter cette commande pour transférer la firebase database de la production à la heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging : heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging

Il vous invitera à confirmer l’action et, une fois cela fait, toutes les données seront migrées.

Voici une solution simple et sûre à cela, en utilisant les pièces jointes et le forking d’Heroku. Il ne nécessite aucune sauvegarde, aucun temps d’arrêt et n’écrase aucune firebase database.

Vous devez d’abord attacher la firebase database de production à l’application de transfert, puis insérer l’application de transfert. Si vous lancez l’application de production, puis attachez-la à l’application de transfert, l’application de facturation sera l’application de production et vous ne pourrez pas détacher la fourchette.

1. D’abord, trouvez le nom de l’add-on de votre firebase database de production (ici c’est postgres-prod-123 ):

 $ heroku addons --app myapp-production heroku-postgresql (postgresql-prod-123) standard-0 $50/month └─ as DATABASE 

2. Ensuite, joignez le module complémentaire de firebase database de production à votre application de transfert. Donnez-lui un nom comme PRODUCTION_DB pour faciliter la reconnaissance:

 $ heroku addons:attach postgresql-prod-123 --app myapp-staging --as PRODUCTION_DB 

3. Créez ensuite un fork de la firebase database de production sur l’application de transfert:

 $ heroku addons:create heroku-postgresql:standard-0 --fork PRODUCTION_DB_URL --as STAGING_DB --app myapp-staging 

4. Enfin, promouvez le fork comme firebase database principale de votre application de transfert:

 $ heroku pg:promote STAGING_DB --app myapp-staging 

Terminé! Votre application de transfert utilise désormais une copie de votre firebase database de production. Notez que votre firebase database intermédiaire précédente est toujours là, vous pouvez vouloir la détruire après vous être assuré que tout fonctionne.

Pour nettoyer, détachez la firebase database de production de l’application de transfert:

 $ heroku addons:detach postgresql-prod-123 --app myapp-staging 

Cela fonctionne pour moi: heroku pg:copy you-app-production::DATABASE DATABASE -a you-app-staging

Je me débattais avec le même problème. Selon la réponse à cette question , le problème pourrait être votre version de gem heroku. Je viens de mettre à jour ma version (de 2.26.2 à 2.26.6) et maintenant ça marche.

Créez d’abord une sauvegarde de production actualisée:

 heroku pgbackups:capture -a productionappslug --expire 

Découvrez quelle couleur Heroku a nommé votre firebase database.

https://postgres.heroku.com/databases ou https://dashboard.heroku.com/apps/STAGINGAPPSLUG/resources

Ensuite, chargez la sauvegarde de la firebase database de production en mode intermédiaire (en changeant RED pour la couleur que vous possédez):

 heroku pgbackups:restore HEROKU_POSTGRESQL_RED -a stagingappslug `heroku pgbackups:url -a productionappslug` 

stagingappslug et liveappslug sont les noms abrégés de vos applications Heroku.

Après NO LUCK. (Im utilisant heroku gem 2.31.4) J’ai fait ce qui suit (aide pour les fatigués)

  1. Connectez-vous à la console Heroku Database

  2. Connectez-vous à la mise en scène> ‘Paramètres’> PGRestore> Copier ‘Connection Settings’ dans un fichier texte.

  3. Connectez-vous à la production> Instantanés, appuyez sur «+» pour créer une nouvelle sauvegarde dès maintenant. Puis appuyez sur Télécharger. Téléchargez dans le dossier apps / tmp ou quand vous voulez.

  4. Définir la mise en attente en mode maintenance

    $ heroku maintenance: on

  5. Exécutez la commande ainsi, avec le texte de configuration de connexion et le fichier de vidage à la fin: PGPASSWORD = {… bits de choses ici …} -p 5432 ‘tmp / b048.dump.dump’

  6. Après exécution:

    $ heroku maintenance: off

  7. Connectez-vous à la mise en scène et vérifiez que les choses correspondent. Trouvez une transaction récente dont vous savez qu’elle est en production si vous le pouvez via. $ heroku exécuter la console pour les deux applications et vérifier les identifiants correspondent.

Je pense que ce n’est pas –remote son –app essayez ceci:

 heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app 

Pour transférer (copier) la firebase database de production (firebase database source ) vers la firebase database intermédiaire (firebase database cible ), vous devez appeler pg:copy partir de l’application cible , en référençant une firebase database source .

heroku pg:copy source-application::OLIVE HEROKU_POSTGRESQL_PINK -a target-application

Un autre exemple:

heroku pg:copy my-production-app::HEROKU_POSTGRESQL_OLIVE HEROKU_POSTGRESQL_PINK --app my-staging-app

Pour obtenir les noms de couleurs de vos bases de données, utilisez:

 heroku pg --app my-production-app heroku pg --app my-staging-app 

Voir pg: copie

C’est ce qui a fonctionné pour moi

  • Téléchargez la sauvegarde depuis la console heroku et téléchargez-la sur s3.
  • heroku pg:backups restore 'DUMP_FILE_URL_FROM_S3' DATABASE --app MY_APP