Comment puis-je télécharger un fichier à partir de Heroku bash?

J'ai exécuté un script ruby de Heroku bash qui génère un fichier CSV sur le serveur que je veux télécharger. J'ai essayé de le déplacer dans le dossier public pour le télécharger, mais cela n'a pas fonctionné. J'ai compris qu'après chaque session dans la console Heroku bash, les fichiers sont supprimés. Y a-t-il une commande à télécharger directement depuis la console Heroku bash?

30
demandé sur iainbeeston 2014-01-30 23:30:51

9 réponses

Heroku les systèmes de fichiers dyno sont éphémères, non persistants et non partagés entre les dynos. Donc, lorsque vous faites heroku run bash, Vous obtenez un nouveau dyno avec un nouveau déploiement de votre application sans aucune des modifications apportées aux systèmes de fichiers éphémères dans d'autres dynos.

Si vous voulez faire quelque chose comme ça, vous devriez probablement faire tout cela dans une session heroku run bash ou tout dans une requête à une application web fonctionnant sur Heroku qui répond avec le fichier CSV que vous voulez.

6
répondu friism 2014-01-30 20:39:41

Si vous parvenez à créer le fichier à partir de heroku run bash, vous pouvez utiliser transfer.sh.

Vous pouvez même chiffrer le fichier avant de le transférer.

cat <file_name> | gpg -ac -o- | curl -X PUT -T "-" https://transfer.sh/<file_name>.gpg

Puis téléchargez-le et déchiffrez-le sur la machine cible

curl https://transfer.sh/<hash>/<file_name>.gpg | gpg -o- > <file_name>
34
répondu niklasae 2016-11-21 13:53:12

J'ai fait comme suit:

  • J'ai d'Abord entré heroku bash avec cette commande:

    Heroku run ' sh '

  • Puis fait un répertoire et déplacé le fichier à ce

  • fait un dépôt git et engage le fichier
  • Enfin, j'ai poussé ce dépôt à github

Avant de vous engager, git vous demandera votre nom et votre email. Lui donner quelque chose de faux!

Si vous avez des fichiers de plus de 100 Mg, appuyez sur gitlab.

S'il y a un moyen plus facile, faites le moi savoir!

Désolé pour mon mauvais anglais.

7
répondu Pouya Gharib Pour 2015-07-29 16:57:55

Je suis d'accord que très probablement votre besoin signifie un changement dans votre architecture d'application, quelque chose comme un dyno de travail. Mais en exécutant les étapes suivantes, vous pouvez transférer le fichier, car Heroku one-off dyno peut exécuter scp:

  1. créer une machine virtuelle dans un fournisseur de cloud, par exemple Digital ocean;
  2. exécutez Heroku one-off dyno et créez votre fichier;
  3. scp fichier de Heroku one-off dyno à ce serveur vm;
  4. scp fichier du serveur vm vers votre machine locale;
  5. supprimer cloud vm et arrêter Heroku one-off dyno.
6
répondu Christos K 2015-06-24 22:15:18

Pour les petits transferts / rapides qui s'adaptent confortablement dans le presse-papiers:

  1. Ouvrez un terminal sur votre appareil local
  2. Exécuter heroku run bash
  3. (à l'intérieur de votre connexion distante, sur le dyno) exécutez cat filename
  4. Sélectionnez les lignes dans votre terminal local et les copier dans votre presse-papiers.
  5. Vérifiez que les nouvelles lignes sont correctes lors du collage.
1
répondu Patrick 2018-01-15 05:33:10

Maintenant, j'ai créé un script shell pour télécharger des fichiers à partir de Git backup repo (par exemple, mon application.le fichier DB sqlite est gitignored et chaque déploiement le tue)

## upload dyno files to git via SSH session
## https://devcenter.heroku.com/changelog-items/1112
# heroku ps:exec
git config --global user.email 'dmitry.cheva@gmail.com'
git config --global user.name 'Dmitry Cheva'
rm -rf ./.gitignore
git init
## add each file separately (-f to add git ignored files)
git add app.db -f
git commit -m "backup on `date +'%Y-%m-%d %H:%M:%S'`"
git remote add origin https://bitbucket.org/cheva/appbackup.git
git push -u origin master -f

Le git redémarre après le déploiement et ne stocke pas l'environnement, vous devez effectuer les 3 premières commandes. Ensuite, vous devez ajouter des fichiers (- f pour les ignorés) et pousser dans repo (-f, car le git nécessitera pull)

0
répondu Дмитрий Чева 2018-04-30 05:41:37

Les dyno Heroku sont livrés avecsftp préinstallé. J'ai essayé git mais il y avait trop d'étapes (il fallait générer un nouveau certificat ssh et l'ajouter à github à chaque fois), alors maintenant j'utilise sftp et cela fonctionne très bien.

Vous aurez besoin d'avoir un autre hôte (dreamhost, hostgator, godaddy, etc) mais si vous le faites, vous pouvez:

sftp username@ftp.yourhostname.com

Acceptez l'empreinte digitale/hachage du serveur, puis entrez votre mot de passe.

Une fois sur le serveur, accédez au dossier que vous souhaitez télécharger (en utilisant cd et ls commande).

Ensuite, utilisez la commande put filename.csv et elle le téléchargera sur votre hébergeur.

Pour récupérer votre fichier: utilisez un client ftp comme filezilla ou cliquez sur l'url si vous avez téléchargé dans un dossier dans le chemin du dossier www ou du site web.

C'est génial car il fonctionne également avec plusieurs fichiers et binaires ainsi que des fichiers texte.

0
répondu Ira Herman 2018-05-25 06:24:54

Une autre façon de le faire (qui n'implique aucun troisième serveur) est d'utiliser la méthode de Patrick mais d'abord compresser le fichier dans un format qui utilise uniquement des caractères ASCII visibles. Cela devrait le faire fonctionner pour n'importe quel fichier, indépendamment des caractères d'espace ou des encodages inhabituels. Je recommande base64 de le faire.

Voici comment je l'ai fait:

  1. connectez-vous à votre instance heroku en utilisant heroku run bash
  2. Utiliser base64 pour imprimer le contenu de votre fichier: base64 <your-file>
  3. sélectionner le texte base64 dans votre terminal et copiez-le
  4. sur votre machine locale décompressez ce texte en utilisant base64 directement dans un nouveau fichier (sur un mac, je ferais pbpaste | base64 --decode -o <your-file>)
0
répondu iainbeeston 2018-07-25 08:57:00

Il n'y a heroku ps:copy:

Copie un fichier d'un dyno vers le système de fichiers local

Utilisation $ heroku ps: copier le fichier

Mais je me suis retrouvé avec cette erreur:

Establishing credentials... error
 ▸    Could not connect to dyno!
 ▸    Check if the dyno is running with `heroku ps'

Peut-être que vous aurez plus de succès avec cela.

0
répondu Szymon Jeż 2018-08-21 14:48:56