J'étudie comment développer une application web décente avec Python. Comme je ne veux pas que certaines structures de haut niveau me gênent, mon choix s'est porté sur le cadre léger de Flask . Le temps nous dira si c'était le bon choix.
Donc, maintenant, j'ai configuré un serveur Apache avec mod_wsgi, et mon site de test fonctionne bien. Cependant, je voudrais accélérer la routine de développement en faisant recharger automatiquement le site sur toutes les modifications apportées aux fichiers py ou de modèle que je fais. Je vois que toute modification dans le fichier .wsgi du site provoque le rechargement (même sans WSGIScriptReloading On dans le fichier de configuration apache), mais je dois encore le produire manuellement (c'est-à-dire, insérer un saut de ligne supplémentaire, enregistrer). Existe-t-il un moyen de provoquer le rechargement lorsque je modifie certains des fichiers py de l'application? Ou, je suis censé utiliser IDE qui actualise le fichier .wsgi pour moi?
flask run
fonctionne également, car lorsque vouspip install flask
, un fichier exécutable de flacon est également installé dans levenv/bin/
dossier.Si vous parlez d'environnements de test / développement, utilisez simplement l'option de débogage. Il rechargera automatiquement l'application flask lorsqu'un changement de code se produit.
Ou, depuis la coque:
http://flask.pocoo.org/docs/quickstart/#debug-mode
la source
Dans des 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 actions suivantes:
ou
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 facile;
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 touch-reload vous permet de spécifier un fichier / dossier qui amènera l'application uWSGI à recharger 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 maintenu par Supervisord - évidemment) a cette ligne quelque part:
J'espère que ça aide!
la source
.ini
fichier de configuration uwsgi distinct . Si vous lisez la documentation sur "touch-reload" c'est dans la configuration uWSGI, pas superviseur.app.run(debug=True)
échoue, mais la définition de la variable d'environnement fonctionne.Si vous utilisez uwsgi, regardez l'option de rechargement automatique de python:
Exemple uwsgi-dev-example.ini:
site_root / __ init__.py
Exécutez ensuite:
Remarque: Cet exemple active également le débogueur.
J'ai suivi cette voie pour imiter la production le plus près possible avec ma configuration nginx. Le simple fait d'exécuter l'application flask avec son serveur Web intégré derrière nginx entraînerait une erreur de passerelle incorrecte.
la source
Quelques mises à jour pour Flask 1.0 et supérieur
l'approche de base du rechargement à chaud est la suivante:
FLASK_ENV=development
(pasFLASK_DEBUG=1
)flask run --debugger
juste pour vous assurer qu'il est alluméFLASK_APP
etFLASK_ENV
si vous avez un.env
fichier à la racine du projet et que python-dotenv est installéla source
export FLASK_ENV=development
travaillé pour moi.app.run(debug=True)
ne semble pas fonctionner.J'ai une idée différente:
Première:
Installez le
python-dotenv
module, qui lira les préférences locales pour votre environnement de projet.Seconde:
Ajoutez un
.flaskenv
fichier dans le répertoire de votre projet. Ajoutez le code suivant:C'est fait!
Avec cette configuration pour votre projet Flask, lorsque vous exécutez
flask run
et vous verrez cette sortie dans votre terminal:Et lorsque vous modifiez votre fichier, enregistrez simplement la modification. Vous verrez que le rechargement automatique est là pour vous:
Avec plus d'explications:
Bien sûr, vous pouvez frapper manuellement
export FLASK_ENV=development
chaque fois que vous en avez besoin. Mais utiliser un fichier de configuration différent pour gérer l'environnement de travail réel semble être une meilleure solution, donc je recommande fortement cette méthode que j'utilise.la source
FLASK_APP
variable dans le.flaskenv
fichier.Les applications Flask peuvent éventuellement être exécutées en mode débogage. Dans ce mode, deux modules très pratiques du serveur de développement appelés le rechargeur et le débogueur sont activés par défaut. Lorsque le rechargeur est activé, Flask surveille tous les fichiers de code source de votre projet et redémarre automatiquement le serveur lorsque l'un des fichiers est modifié.
Par défaut, le mode de débogage est désactivé. Pour l'activer, définissez une
FLASK_DEBUG=1
variable d'environnement avant d'appeler le flaconrun
:Avoir un serveur en cours d'exécution avec le rechargeur activé est extrêmement utile pendant le développement, car chaque fois que vous modifiez et enregistrez un fichier source, le serveur redémarre automatiquement et reprend la modification.
la source
Pour y parvenir dans PyCharm, définissez la section «Variables d'environnement» sur:
Pour Flask 'run / debug configurations'.
la source
$ env: Flask_ENV = "MyAPP.py"
$ env: Flask_ENV = "développement"
course de flacon
Cela devrait être travaillé
la source