web-dev-qa-db-fra.com

Exécution d'un script simple python en continu sur Heroku

J'ai un simple script python que j'aimerais héberger sur Heroku et l'exécuter toutes les 10 minutes à l'aide du planificateur Heroku. Alors, quelqu'un peut-il m'expliquer ce que je dois taper sur la commande rake du planificateur et comment Je devrais changer le Procfile de Heroku?

20
rksh

Bien sûr, vous devez faire quelques choses:

  1. Définissez un requirements.txt fichier à la racine de votre projet qui répertorie vos dépendances. C'est ce que Heroku utilisera pour "détecter" que vous utilisez une application Python.

  2. Dans l'addon du planificateur Heroku, définissez simplement la commande que vous devez exécuter pour lancer votre script python. Ce sera probablement quelque chose comme python myscript.py.

  3. Enfin, vous devez avoir une sorte de serveur Web qui écoutera sur le bon port Heroku - sinon, Heroku pensera que votre application ne fonctionne pas et elle sera à l'état "bloqué" - ce qui n'est pas ce que vous vouloir. Pour satisfaire à cette exigence Heroku, vous pouvez exécuter un serveur Web très simple Flask comme celui-ci ...

Code (server.py):

from os import environ
from flask import Flask

app = Flask(__name__)
app.run(environ.get('PORT'))

Ensuite, dans votre Procfile, dites simplement: web: python server.py.

Et cela devrait à peu près le faire =)

23
rdegges

Si vous utilisez un compte gratuit [non vérifié *] sur Heroku (vous ne pouvez donc pas installer d'extensions), au lieu d'utiliser "Heroku scheduler", utilisez time.sleep (n). Vous n'avez pas besoin de Flask ou de tout serveur dans ce cas, placez simplement le script, par exemple, dans le dossier Scripts (dans l'application/le projet par défaut de Heroku) et ajoutez-le à Procfile:
worker: python script.py.
Bien sûr, vous remplacez script.py par le chemin d'accès à votre script, y compris le nom,
ex. worker: python Scripts/my_script.py
Remarque: Si votre script utilise des modules tiers, par exemple bs4 ou requêtes, vous devez les installer dans
pipenv install MODULE_NAME ou créez requirements.txt et placez-le à l'emplacement de manage.py, Procfile, Pipfile, (etc.). Place suivante dans ce fichier requirements.txt:
requirements.txt:

MODULE_NAME==MODULE_VERSION

Vous pouvez les vérifier dans pip gel | grep MODULE_NAME
Enfin déployez sur le serveur Heroku en utilisant git et exécutez la commande suivante:

heroku ps:scale worker=1

C'est ça! Le bot/script est en cours d'exécution, vérifiez-le dans les journaux:

heroku logs --tail

Source: https://github.com/michaelkrukov/heroku-python-script


non vérifié * - "Pour aider à prévenir les abus, l'approvisionnement d'un module complémentaire nécessite une vérification de compte. Si votre compte n'a pas été vérifié, vous serez invité à visiter le site de vérification." Il redirige vers les informations de carte de crédit. Cependant, vous pouvez toujours avoir Free Acc, mais vous ne pourrez pas utiliser certaines options pour les utilisateurs gratuits, telles que l'installation de modules complémentaires:
https://devcenter.heroku.com/articles/getting-started-with-python#provision-add-ons

9
Belloz