python - deploy - wsgi apache
Recarga automática de la aplicación Python Flask al cambiar el código (5)
En entornos de prueba / desarrollo
El depurador werkzeug ya tiene disponible una función de ''recarga automática'' que se puede habilitar haciendo una de las siguientes acciones:
app.run(debug=True)
o
app.debug = True
También puede usar un archivo de configuración separado para administrar toda su configuración si lo necesita. Por ejemplo, uso ''settings.py'' con una opción ''DEBUG = True''. Importar este archivo también es fácil;
app.config.from_object(''application.settings'')
Sin embargo, esto no es adecuado para un entorno de producción.
Entorno de producción
Personalmente elegí Nginx + uWSGI sobre Apache + mod_wsgi por algunos motivos de rendimiento, pero también las opciones de configuración. La opción de touch-reload te permite especificar un archivo / carpeta que hará que la aplicación uWSGI recargue tu nueva aplicación de matraz.
Por ejemplo, su script de actualización extrae sus cambios más recientes y toca el archivo ''reload_me.txt''. Tu script ini uWSGI (que Supervisord mantiene, obviamente) tiene esta línea en alguna parte:
touch-reload = ''/opt/virtual_environments/application/reload_me.txt''
¡Espero que esto ayude!
Estoy investigando cómo desarrollar una aplicación web decente con Python. Ya que no quiero que algunas estructuras de alto orden se interpongan en mi camino, mi elección recayó en el marco ligero de Flask . El tiempo dirá si esta fue la elección correcta.
Entonces, ahora configuré un servidor Apache con mod_wsgi, y mi sitio de prueba funciona bien. Sin embargo, me gustaría acelerar la rutina de desarrollo haciendo que el sitio se vuelva a cargar automáticamente ante cualquier cambio en los archivos de py o plantilla que realice. Veo que cualquier cambio en el archivo .wsgi del sitio causa la recarga (incluso sin WSGIScriptReloading On en el archivo de configuración de Apache), pero aún tengo que pincharlo manualmente (es decir, insertar salto de línea adicional, guardar). ¿Hay alguna forma de causar recarga cuando edito algunos de los archivos py de la aplicación? O bien, ¿debo usar IDE para actualizar el archivo .wsgi?
Para lograr esto en PyCharm, establezca la sección ''Variables del entorno'' en:
PYTHONUNBUFFERED = 1; FLASK_DEBUG = 1
Para las configuraciones de ejecución / depuración de Flask
Si está ejecutando usando uwsgi mire la opción de recarga automática de python:
uwsgi --py-autoreload 1
Ejemplo 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
raíz_sitio / __ init__.py
def register_debug_server():
from werkzeug.debug import DebuggedApplication
app = Flask(__name__)
app.debug = True
app = DebuggedApplication(app, evalex=True)
return app
Entonces corre:
uwsgi --ini uwsgi-dev-example.ini
Nota: Este ejemplo también habilita el depurador.
Seguí esta ruta para imitar la producción lo más cerca posible con mi configuración nginx. Simplemente ejecutar la aplicación del matraz con su servidor web incorporado detrás de nginx resultaría en un error de puerta de enlace.
Si está hablando de entornos de prueba / desarrollo, simplemente use la opción de depuración. Se volverá a cargar automáticamente la aplicación del matraz cuando se produzca un cambio de código.
app.run(debug=True)
O, desde el caparazón:
$ export FLASK_DEBUG=1
$ flask run
La forma actual recomendada (Frasco> = 0.11) es con la utilidad de línea de comando del flask
.
http://flask.pocoo.org/docs/0.11/server/
Ejemplo:
$ export FLASK_APP=main.py
$ export FLASK_DEBUG=1
$ python -m flask run
o en un comando:
$ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run
Prefiero el python -m flask run
vez del flask run
porque el primero también funciona con virtualenv
.
Si desea un puerto diferente al predeterminado ( 5000
), agregue la opción --port
.
Ejemplo:
$ python -m flask run --port 8080
Más opciones están disponibles con:
$ python -m flask run --help