Bot Discord et Heroku : est possible de faire tourner une boucle indéfiniment dans le programme ?

a marqué ce sujet comme résolu.

C’est exact, les dynos redémarrent toutes les 24 heures plus un délai aléatoire qui peut aller jusqu’à 216 minutes (pour éviter de tout redémarrer pile au même moment), comme leur documentation l’indique :

Dynos are also restarted (cycled) at least once per day to help maintain the health of applications running on Heroku. Any changes to the local filesystem will be deleted. The cycling happens once every 24 hours (plus up to 216 random minutes, to prevent every dyno for an application from restarting at the same time).

https://devcenter.heroku.com/articles/dynos#restarting

Dans la grande majorité des cas, ce n’est pas très grave car les applications sont souvent conçues pour ne pas garder d’état persistant elles-mêmes. Mais, dans ton cas, qu’est-ce qui fait que cela pourrait représenter un problème ? On peut éventuellement trouver des solutions si tu en dis un peu plus.

+0 -0

Tu as plusieurs solutions pour que "le bot envoie un message tous les jours grâce à cette boucle.". On retrouve ces solutions dans la documentation d’Heroku (qui est très complète !).

L’extension Heroku Scheduler

La solution la plus simple et gratuite. Cette extension permet d’exécuter une action toutes les 10 minutes, toutes les heures ou tous les jours.

Une horloge (clock process)

La solution est plus complexe et n’est pas gratuite. Mais avec une horloge il y a une plus grande flexibilité comme la possibilité d’exécuter une action toutes les secondes, ce que ne propose pas l’extension citée avant.
On définit par exemple dans le Procfile :

clock:  node clock.js

Le script clock.js sera exécuté au lancement de l’horloge. Comme tous les dynos Heroku, l’horloge est également redémarrée une fois tous les 24 heures. Il faut donc s’assurer au démarrage de l’horloge qu’aucun intervalle n’a été manqué pendant la période d’interruption.

Aussi, il est important de ne pas exécuter les actions dans le script de l’horloge clock.js (si l’action est très longue par exemple). Pour cela, l’horloge devra ajouter la tâche à une file d'exécution et ce sera un ou plusieurs workers qui devront les exécuter. C’est donc encore des du travail et des frais supplémentaires.

La bonne façon de faire avec une horloge ! Source: Heroku
La bonne façon de faire avec une horloge ! Source: Heroku

Je pense, si j’ai bien saisi tes besoins, que la première solution est suffisante pour ce que tu souhaites faire. Elle a le mérite d’être très simple à mettre en place et en plus d’être gratuite. Heroku a même fait un tutoriel !

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