Rechargement automatique de l’application Python Flask lors des modifications de code

J’étudie comment développer une application web décente avec Python. Comme je ne veux pas que des structures de haut niveau me gênent, mon choix s’est porté sur le cadre Flask léger. Le temps dira si c’était le bon choix.

Donc, maintenant, j’ai installé un serveur Apache avec mod_wsgi, et mon site de test fonctionne correctement. Cependant, je voudrais accélérer la routine de développement en faisant en sorte que le site se recharge automatiquement en cas de modification des fichiers py ou des modèles que je crée. Je constate que tout changement dans le fichier .wsgi du site entraîne un rechargement (même sans WSGIScriptReloading On dans le fichier de configuration apache), mais je dois tout de même le faire manuellement (insérer un saut de ligne supplémentaire, enregistrer). Existe-t-il un moyen de provoquer un rechargement lorsque je modifie certains fichiers py de l’application? Ou, je suis censé utiliser IDE qui actualise le fichier .wsgi pour moi?

La méthode actuelle recommandée (Flask> = 0.11) est l’utilitaire de ligne de commande flask .

http://flask.pocoo.org/docs/0.11/server/

Exemple:

 $ export FLASK_APP=main.py $ export FLASK_DEBUG=1 $ python -m flask run 

ou en une seule commande:

 $ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run 

Je préfère le python -m flask run plutôt que le flask run car le premier fonctionne également avec virtualenv .

Si vous souhaitez un port différent de celui par défaut ( 5000 ), ajoutez l’option --port .

Exemple:

 $ python -m flask run --port 8080 

Plus d’options sont disponibles avec:

 $ python -m flask run --help 

Si vous parlez des environnements de test / dev, utilisez simplement l’option de débogage. Il rechargera automatiquement l’application flask lorsqu’un changement de code se produit.

 app.run(debug=True) 

Ou de la coquille:

 $ export FLASK_DEBUG=1 $ flask run 

http://flask.pocoo.org/docs/quickstart/#debug-mode

Dans les environnements de test / développement

Le débogueur werkzeug dispose déjà d’une fonction de “rechargement automatique” qui peut être activée en effectuant l’une des opérations suivantes:

 app.run(debug=True) 

ou

 app.debug = True 

Vous pouvez également utiliser un fichier de configuration distinct pour gérer toute votre configuration, si vous en avez besoin. Par exemple, j’utilise “settings.py” avec une option “DEBUG = True”. L’importation de ce fichier est également simple.

 app.config.from_object('application.settings') 

Cependant, cela ne convient pas à un environnement de production.

Environnement de production

Personnellement, j’ai choisi Nginx + uWSGI sur Apache + mod_wsgi pour quelques raisons de performances, mais aussi pour les options de configuration. L’option de rechargement tactile vous permet de spécifier un fichier / dossier pour que l’application uWSGI recharge votre application flask nouvellement déployée.

Par exemple, votre script de mise à jour extrait vos dernières modifications et touche le fichier ‘reload_me.txt’. Votre script ini uWSGI (qui est conservé par Supervisord – évidemment) a cette ligne quelque part:

 touch-reload = '/opt/virtual_environments/application/reload_me.txt' 

J’espère que ça aide!

Si vous utilisez uwsgi, regardez l’option python auto reload:

 uwsgi --py-autoreload 1 

Exemple: uwsgi-dev-example.ini:

 [uwsgi] socket = 127.0.0.1:5000 master = true virtualenv = /Users/xxxx/.virtualenvs/sites_env chdir = /Users/xxx/site_root module = site_module:register_debug_server() callable = app uid = myuser chmod-socket = 660 log-date = true workers = 1 py-autoreload = 1 

racine_site / __ init__.py

 def register_debug_server(): from werkzeug.debug import DebuggedApplication app = Flask(__name__) app.debug = True app = DebuggedApplication(app, evalex=True) return app 

Puis lancez:

 uwsgi --ini uwsgi-dev-example.ini 

Remarque: Cet exemple active également le débogueur.

Je suis allé dans cette voie pour imiter la production aussi près que possible de ma configuration nginx. L’exécution de l’application flask avec son serveur Web intégré derrière nginx entraînerait une erreur de passerelle incorrecte.

Pour y parvenir, PyCharm a défini la section “Variables d’environnement” comme suit:

PYTHONUNBUFFERED = 1; FLASK_DEBUG = 1

Pour Flask ‘Exécuter / Déboguer les configurations’