transfert db à partir d'un heroku application à l'autre plus rapidement
Est-il un moyen plus rapide pour transférer ma base de données de production d'une application de test?
Actuellement, je fais un heroku db:pull
à ma machine locale puis heroku db:push --app testapp
mais cela devient fastidieux. J'ai quelques graines de données, mais il n'est pas aussi précis que simplement des tests avec mes données du monde réel. Et comme ils sont tous deux stockés sur un voisinage nuage AWS, il doit y avoir un moyen plus rapide de déplacer les données?
J'ai pensé à utiliser un heroku paquet, mais j'ai remarqué que les animer de commande est parti?
bundles:animate <bundle> # animate a bundle into a new app
- Note: Heroku bundles Bundler sont distinctes et sans rapport avec les concepts.
- ah ouais, j'avais même pas penser à la possible confusion quand je l'ai écrit.
Vous devez vous connecter pour publier un commentaire.
Il est assez commun pour migrer les bases de données entre la mise en scène, les tests et les environnements de production pour les Rails Apps. Et
heroku db:pull/push
est lente et douloureuse. Le meilleur moyen que j'ai trouvé pour l'instant est à l'aide de Heroku PG Sauvegardes add-on et c'est gratuit. J'ai suivi les étapes suivantes pour migrerla production de la base de données de serveur de transfert:
1) Créer la sauvegarde de la production-app db
Cela va générer b001 fichier de sauvegarde de la base de données principale (généralement de base de données de production dans la base de données.yml)
2) Pour afficher toutes les sauvegardes (FACULTATIF)
3) utilisent Maintenant le pg:les sauvegardes de commande de restauration pour remplir serveur de test de la base de données à partir de la dernière sauvegarde de fichiers sur le serveur de production
Rappelez-vous que la restauration est une opération destructrice, il va supprimer les données existantes avant de le remplacer par le contenu du fichier de sauvegarde.
heroku pgbackups:url --app production-app
DATABASE_URL --application mise en scène-app"Donc, les choses sont encore plus facile maintenant .. la caisse de la commande de transfert dans le cadre de pgbackups
https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#4b-alternative-transfer-data-between-applications
Ce a a fonctionné à merveille pour moi de prendre la production de code pour mon site de test.
pg:backups restore
détruit original db (voir ici): "Contrairement à la précédente pgbackups commandes, vous ne pouvez pas restaurer une sauvegarde partielle dans une base de données existante. Lorsque vous exécutez pg:les sauvegardes de restauration, toutes les données sont supprimées de la base de données cible avant de restaurer la sauvegarde."La réponse correcte a de nouveau changé le 11 Mars, 2015.
Remarque expressément que l'argument est maintenant
public-url
.https://blog.heroku.com/archives/2015/3/11/pgbackups-levels-up
Mise à jour pour la mi-2015...
La pgbackups add-on a été désapprouvée. Pas plus
pgbackups:transfer
.pg:copy
est idéal pour ce scénario.Pour copier une base de données à partir de yourapp (exemple db nom: HEROKU_POSTGRESQL_PINK_URL à yourapp_staging (exemple db nom: HEROKU_POSTGRESQL_WHITE_URL)
Puis, lorsqu'elle est terminée, tournez la mise en scène de retour sur:
Rappel: vous pouvez utiliser
heroku pg:info -a yourapp-staging
(et yourapp) pour obtenir la base de données constantes.(source: https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default)
Cela peut être fait sur
production_host
ou surtest_host
fonctionnent dans les deux sens.pg_dump ...| psql...
sont dans la même région EC2.N'ai pas testé, mais il pourrait fonctionner.
Faire pour obtenir l'URL de votre base de données source:
Puis essayez d'exécuter la
db:push
avec qui.Cela pourrait ne pas fonctionner si Heroku ne permettent pas l'accès à la DB machines provenant de l'extérieur de leur réseau, ce qui est probablement le cas. Vous pourriez, peut-être, essayez d'utiliser des robinets (gem que heroku db commandes d'utiliser en interne) à partir de votre application de code quelque part (peut-être une tâche rake). Cela serait d'autant plus rapide que l'approche ci-dessus, car tout reste complètement dans AWS.
Edit:
Voici une (certes hacky) moyen de faire ce que j'ai décrit ci-dessus:
Emparer de la base de données URL, comme dans le premier extrait de code ci-dessus. Ensuite, à partir d'une tâche rake (vous pourriez le faire sur console, mais vous risquez de manquer dans les 30 secondes de délai limite sur les commandes de la console), exécuter une commande shell pour robinets (ne pouvait pas facilement déterminer si il est possible d'utiliser les robinets directement à partir de Ruby; tous les docs montrent l'utilisation de la CLI):
Les backticks sont importants; c'est de cette façon Ruby indique une commande shell, qui tape est. Nous espérons que les robinets de commande est accessible à partir de l'app. Cela évite le problème de l'accès à la base de données de machine de l'extérieur Heroku, puisque vous exécutez cette commande à partir de votre application.
Heroku vous permet de fourche applications existantes dans la production. Utiliser heroku fourche pour copier une application existante, y compris les add-ons, pour la config de vars, et Heroku de données Postgres.
Suivez les instructions sur Heroku: https://devcenter.heroku.com/articles/fork-app
Mise à jour pour la mi-2016...
Heroku ont maintenant une
--fast
drapeau lors de la création de fourches, ils peuvent être jusqu'à 30 heures out-of-date.$ heroku addons:create heroku-postgresql:standard-4 --fork HEROKU_POSTGRESQL_CHARCOAL --fast --app sushi
https://devcenter.heroku.com/articles/heroku-postgres-fork#fork-fast-option