Bonjour, je suis en train de créer un BOT Discord en Python, et je le fait tourner 24h/24 sur Heroku via Github. Mais je me demandais si il y existe un moyen de stocker des données dans un fichier à côté de celui de mon BOT.
Tu peux utiliser une base de données SQLite, ça tient en un seul fichier et le module est très souvent déjà inclus avec Python sans avoir besoin d’installer quoi que ce soit : https://docs.python.org/3/library/sqlite3.html
Sinon, Heroku propose PostgreSQL dans son offre si je ne m’abuse, tu peux donc l’utiliser via un module à installer comme psycopg2 : https://pypi.org/project/psycopg2/
Tout à fait, un fichier sera créé et il contiendra les données. Il existe en effet un mode en RAM (il faut passer :memory: en nom de fichier pour cela) mais les données ne seront pas persistantes, dans ce cas.
Je ne sais pas si avec Heroku c’est un problème de devoir créer un fichier persistant depuis ton app Python. Si oui, il faudra alors envisager d’utiliser leur DB, ou bien de changer de provider.
Il faut d’abord s’assurer que Heroku puisse effectivement supporter cela. Si Heroku ne supporte pas la gestion de fichiers aux côtés de l’application Python, il ne sera pas possible d’utiliser ni SQLite, ni des fichiers simples pour sauvegarder tes informations.
D’après leur documentation, ça semble assez mal parti :
The Heroku filesystem is ephemeral - that means that any changes to the filesystem whilst the dyno is running only last until that dyno is shut down or restarted. Each dyno boots with a clean copy of the filesystem from the most recent deploy. This is similar to how many container based systems, such as Docker, operate.
Tu as donc les solutions suivantes :
Utiliser une DB fournie par Heroku (il y a PostgreSQL et Redis)
Ne pas utiliser Heroku et héberger ton bot ailleurs où il sera possible d’avoir une DB en fichier
Quel produit de chez Heroku utilises-tu actuellement ? Un Dyno gratuit ?
Parce que l’extrait de documentation que j’ai indiqué précise qu’un Dyno dispose d’un système de fichier éphémère (cf. mon précédent message), tu ne peux donc pas stocker de fichiers de façon stable dessus, ce qui exclut alors SQLite.
Tout est possible dans l’absolu, mais la question est surtout de savoir si c’est la solution correcte et simple pour gérer ton problème.
Quand tu parles de « données », de quoi s’agit-il exactement ?
Pour répondre de façon plus générale, tu es ici dans un environnement dit Cloud. On ne raisonne pas tout à fait de la même façon qu’avec les environnements traditionnels tels qu’un serveur et ta machine personnelle. Dans une environnement traditionnel, tu pourrais te contenter de modifier des fichiers avec Python sur la machine comme tu veux. Mais dans un environnement Cloud (comme celui de Heroku et ses concurrents), la notion de serveur n’existe plus tellement. Tu raisonnes plutôt en terme de plusieurs services à utiliser conjointement pour faire tourner une application complète : un dyno pour exécuter le code Python, une DB pour stocker les données, un Object Storage pour stocker les fichiers, …
Quand on débute, ce n’est pas vraiment ce qu’il y a de plus simple à gérer, même si les cloud providers comme Heroku font un marketing pour raconter le contraire
Oui, il existe des lib Python pour travailler avec des dépôts Git (de Github, entres autres).
Mais j’attire ton attention sur le fait qu’un dépôt Git n’est pas, en général, l’endroit pour stocker les données produites par ton application Python. Ce n’est pas conçu pour cela.
Je cherche à stocker des données (exemple : des lettres, des chiffre ou autre !) dans un fichier accessible par mon programme Python qui tourne sur Heroku.
Le stockage de données dans un fichier est à oublier d’après les termes que cite @sgble : toute donnée stockée disparaîtrait au redémarrage du programme.
Même chose si tu utilisais une base de données SQLite en mémoire.
Il va donc te falloir comme indiquer te tourner vers une autre solution pour le stockage des données, par exemple PostgreSQL qui est proposé.
Pour avoir utilisé Heroku pendant plusieurs années, je confirme ce qui a été dis précédemment : les dynos (même ceux payants) sont redemarrés tous les 24h (environ).
Par conséquent, si tu sauvegardes un fichier dans un dyno, il n’aura une espérance de vie que de 24h maximum.
La meilleure solution consiste en l’utilisation d’un stockage détaché, comme par exemple une base de données PostgreSQL (dont une version gratuite est proposée par Heroku). C’est très simple à mettre en place, et l’utilisation d’un ORM peut te faciliter davantage la tâche !
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte