web-dev-qa-db-fra.com

Comment utiliser le système de fichiers éphémère d'Heroku

J'utilise Python/Django sur Heroku (Cedar Stack) et j'ai une commande de gestion que j'ai besoin d'écrire qui va extraire un fichier d'un compartiment S3 et le traiter. Je ne suis pas sûr de comprendre comment utiliser le système de fichiers éphémère. Existe-t-il uniquement certains répertoires accessibles en écriture? J'ai trouvé un autre article qui impliquait qu'il n'y avait que certains dossiers qui étaient accessibles en écriture (mais il ne semble pas s'appliquer à la pile Cedar). J'ai trouvé ce dev article mais il n'entre pas dans les détails (note: je comprends que c'est juste temporaire. J'ai seulement besoin de décompresser le fichier et de le traiter). Puis-je simplement créer un dossier n'importe où sous la racine de l'application? Et comment pourrais-je obtenir cela? Il semble que je pourrais probablement utiliser $ HOME. J'ai fait un peu de test en me connectant à via

$ heroku run bash

et en cours d'exécution:

$ echo #HOME

résultats:

/ app

et en cours d'exécution:

$ mkdir $HOME/tmp

crée un dossier à la racine de l'application et donne avec le même utilisateur et groupe que les autres fichiers et dossiers.

Alors ... tout ce qui me manque ici? Une meilleure façon de le faire? Existe-t-il une variable d'environnement OS pour cela? J'ai lancé "env" et je n'en vois pas de meilleur.

55
David S

Vous pouvez créer un fichier sous le répertoire '/ tmp', et ce fichier sera détruit une fois la demande terminée. Je fais ça sur Cedar, et je n'ai eu aucun problème.

52
Austin Pocus

Pour vraiment comprendre le système de fichiers éphémère, vous devez comprendre ce qu'est un dyno. Vous pouvez en savoir plus sur comment fonctionne Dynos . En résumé, un processus s'exécute sur Heroku dans une machine virtuelle avec son propre système de fichiers. Cette machine virtuelle peut s'arrêter pour un certain nombre de raisons, emportant avec elle le système de fichiers.

Le système de fichiers sous-jacent sera détruit lors du redémarrage et de la reconfiguration d'une application (par exemple heroku config ...), mis à l'échelle, etc. Par exemple, si vous avez deux dynos Web, écrivez quelques fichiers dans le système de fichiers éphémère et redimensionnez-les sur trois dynos, ces fichiers seront détruits car votre application s'exécute sur de nouveaux dynos.

En général, le système de fichiers éphémère fonctionne comme n'importe quel système de fichiers. Répertoires dans lesquels vous êtes autorisé à écrire, tels que $HOME et /tmp, vous pouvez y écrire des fichiers. Tout fichier nécessitant une permanence doit être écrit dans S3 ou dans un magasin durable similaire. S3 est préféré car Heroku fonctionne sur AWS et S3 offre certains avantages en termes de performances. Tous les fichiers qui peuvent être recréés à volonté peuvent être stockés dans la boutique éphémère du dyno.

74
Naaman Newbold