Je dois exécuter une commande Manook.py LoadData pour importer des données dans la base de données de My Heroku Instance et le système de fichiers éthéré de Heroku pose quelques problèmes à cet égard. Je préférerais vraiment ne pas avoir à ajouter les fichiers de données à mon référentiel Heroku et à appuyer sur une mise à jour chaque fois que je souhaite exécuter LoadData (car je dois le faire régulièrement avec différents fichiers pour différentes instances Heroku en cours d'exécution. La même base de code.) Existe-t-il un moyen d'exécuter LoadData sur une instance distante sans que le fichier de données résidant sur le système de fichiers de l'instance, peut-être soit en tuyant les données dans ou en référençant un fichier local ou B) Télécharger un fichier et exécuter LOADDATA dans la même session afin que le fichier puisse exister dans l'instance pendant que la commande est exécutée? (Je me rends compte que cela disparaîtra dès que la session interactive se termine) p>
4 Réponses :
Voici ce que a proposé (en utilisant mon (a) l'idée avec la tuyauterie de Stdin), mais cela ne fonctionne pas en raison de ce problème avec Heroku Run: HTTTPS://github.com/heroku/heroku/issues/256
Une commande de gestion visant à envelopper LoadData afin de l'utiliser STDIN (il pourrait simplement être écrit En tant que scripts Python Si vous configurez le Django Eviron): P>
$ cat some_dump.json | heroku run python manage.py loaddata_stdin.py
Approche parfaite, mais maintenant obsolète - Les mises à jour de Django et Heroku surpassent désormais le besoin de cela (voir ma réponse pour les références et la mise à jour)
Heroku's Les sauvegardes PG peuvent vous aider à vous aider (peut-être qu'il n'existait pas A cette époque l'an dernier): https://devcenter.heroku.com/articles/ Heroku-Postgres-import-export
Le didacticiel décrit, en termes assez simples, comment utiliser i personnellement téléchargé pg_dump code> pour créer le vidage SQL (ajouter les commandes ici au cas où le lien change) : p> mydb.dump code> dans un dossier Dropbox, puis a exécuté la commande PGBACTUPS: P> $ heroku pgbackups:restore <database url> '<url for mydb.dump>'
Ouais, pg_dump et pgbackups: la restauration est définitivement la voie à suivre pour une benne basculante / restauration complète. Ce que je cherchais, importerait un ensemble de données partielles (pas un DB complet ou même une table complète) déversée de la commande de Dumbdata de Django. J'imagine que quelque chose de similaire pourrait être conçu avec pg_dump / restaurer, mais c'était au-delà de moi ...
(... plusieurs années plus tard) strong> L'approche @ben Roberts est raisonnable mais note que plusieurs années plus tard, toutes les obstacles ont été corrigés: p> Donc, vous n'avez pas besoin d'une commande de gestion personnalisée. Chargement des données d'un fichier local dans Heroku doit maintenant être aussi simple que: p>
- code> li>
$ cat your-data-file.json | heroku run --no-tty -a <your-app> -- python manage.py loaddata --format=json -
Mise à jour: sur les versions récentes de Heroku CLI, cela ne fonctionne que si vous ne réussissez que si vous passez - NO-TTY code>: HEROKU RUN --NO-TTY
ou vous pouvez loaddata code> à votre DB local, puis: heroku pg:push mylocaldb HEROKU_POSTGRESQL_MAGENTA --app sushi