mod_wsgi deploy con python apache web flask

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

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


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