estoy en busca de algo así como uWSGI + django autoreload mode por frasco.¿Cómo configurar la recarga automática con Flask + uWSGI?
Respuesta
Usted podría tratar de usar supervisord como gerente para su aplicación Uwsgi. También tiene una función de reloj que recarga automáticamente un proceso cuando un archivo o carpeta ha sido "tocado"/modificado.
se encuentra un buen tutorial aquí: Flask+NginX+Uwsgi+Supervisord
Me temo que el frasco es realmente demasiado huesos desnudos tener una aplicación como esta incluido por defecto.
dinámicamente recargando código en la producción es generalmente una mala cosa, pero si usted está preocupado acerca de un entorno de desarrollo, echar un vistazo a esta secuencia de comandos shell bash http://aplawrence.com/Unixart/watchdir.html
sólo cambia el intervalo de reposo a lo que se adapte a sus necesidades y sustituto el comando echo con lo que sea que utilices para volver a cargar uwsgi. Ejecuto uwsgi un master mode y solo envío un comando killall uwsgi.
La funcionalidad de auto-recarga del desarrollo del modo matraz es efectivamente prestado por la biblioteca Werkzeug subyacente. El código relevante está en werkzeug/serving.py
- vale la pena echarle un vistazo. Pero, básicamente, la aplicación principal genera el servidor WSGI como un subproceso que registra cada archivo .py
activo una vez por segundo, en busca de cambios. Si ve alguno, el subproceso se cierra y el proceso principal lo vuelve a iniciar de nuevo, de hecho, recarga los chages.
No hay ninguna razón por la que no se podía poner en práctica una técnica similar a la capa de uWSGI. Si no desea utilizar un bucle stat, puede intentar utilizar los comandos subyacentes de visualización de archivos del sistema operativo. Al parecer (según el código de Werkzeug), pyinotify está libre de errores, pero quizás Watchdog obras? Pruebe algunas cosas y vea qué pasa.
Editar:
En respuesta al comentario, creo que esto sería bastante fácil volver a implementar. Basándose en el ejemplo proporcionado a partir de su enlace, junto con el código de werkzeug/serving.py
:
""" NOTE: _iter_module_files() and check_for_modifications() are both
copied from Werkzeug code. Include appropriate attribution if
actually used in a project. """
import uwsgi
from uwsgidecorators import timer
import sys
import os
def _iter_module_files():
for module in sys.modules.values():
filename = getattr(module, '__file__', None)
if filename:
old = None
while not os.path.isfile(filename):
old = filename
filename = os.path.dirname(filename)
if filename == old:
break
else:
if filename[-4:] in ('.pyc', '.pyo'):
filename = filename[:-1]
yield filename
@timer(3)
def check_for_modifications():
# Function-static variable... you could make this global, or whatever
mtimes = check_for_modifications.mtimes
for filename in _iter_module_files():
try:
mtime = os.stat(filename).st_mtime
except OSError:
continue
old_time = mtimes.get(filename)
if old_time is None:
mtimes[filename] = mtime
continue
elif mtime > old_time:
uwsgi.reload()
return
check_for_modifications.mtimes = {} # init static
Es no probado, pero debería funcionar.
Gracias por los consejos! Me parecía un poco a través werkzeug.serving, pero esperaba poder evitar ensuciarme las manos, pidiendo una solución rápida ... tal vez es hora de que alguien lo implementa. :) – Florian
import gevent.wsgi
import werkzeug.serving
@werkzeug.serving.run_with_reloader
def runServer():
gevent.wsgi.WSGIServer(('', 5000), app).serve_forever()
(se puede utilizar un servidor WSGI arbitraria)
Lamentablemente, esta no es una respuesta a mi pregunta. Quiero uwsgi para hacer la porción. Por cierto: Flask's app.run (debug = True) proporciona recarga desde la caja. – Florian
Aunque el desarrollador. El servidor web incluido con Flask proporciona recarga, ¡también proporciona un shell para la depuración! ¡No quieres dar un shell Python a todos los que están en producción! – Jabba
Para entorno de desarrollo se puede tratar mediante el parámetro --python-autoreload de uwsgi. Al mirar el código fuente, puede funcionar solo en modo enhebrado (--enable-threads).
Éste me funcionó. Al agregar 'python-autoreload = 1' a mi archivo' uwsgi.ini', se vuelve a cargar! ¡Gracias! – JoshFinnie
Usando el modo uwsgi emperador - esto funcionó al agregar al ini de la aplicación. ¡Gracias! –
creo que vale la pena señalar que los valores '' 1' y true' * * no son intercambiables en este caso. Solo '1' funciona para mí. – kungphu
Me postulo uwsgi versión 1.9.5 y la opción
uwsgi --py-autoreload 1
funciona muy bien
buena captura. no listado en --help output. ¡Gracias! – user237419
Al usar el modo uwsgi emperador, no funciona ni para el inicio del proceso del emperador ni para la configuración individual de la aplicación. El ex da "opción desconocida", el último no da nada. De cualquier forma, el proceso debe reiniciarse para que se noten los cambios ... –
¿Cómo ejecuto uwsgi --py-autoreload 1? – Burf2000
Si está configurando uwsgi
con argumentos de comandos, pase --py-autoreload=1
:
uwsgi --py-autoreload=1
Si está utilizando un archivo .ini
para configurar y usar uwsgi
uwsgi --ini
, añada lo siguiente a su archivo .ini
:
py-autoreload = 1
- 1. Flask debug = True no funciona al pasar por uWSGI
- 2. Desplegando Pilones con uWSGI
- 3. JSF y recarga automática de archivos xhtml
- 4. La recarga automática de Velocity Template no funciona
- 5. uWSGI + nginx para el proyecto django, error con strting uwsgi
- 6. Recarga automática de archivos en Scala/Lift/SBT .11?
- 7. Python Flask, cómo configurar el tipo de contenido
- 8. Cómo configurar la altura automática para el diseño extjs hbox?
- 9. WSGI vs uWSGi con Nginx
- 10. uwsgi + django vía Nginx - uwsgi settings/spawn?
- 11. uWSGI keepalive
- 12. ¿Cómo cambia GitHub la URL pero no la recarga?
- 13. ¿Cómo hacer Flask/mantener la conexión HTTP Ajax con vida?
- 14. Recarga de bootstrap con Grails
- 15. ¿Cómo puedo configurar el número permitido de caracteres del parámetro GET en uWSGI?
- 16. ¿Cómo obtener la recarga jqGrid para ir al servidor?
- 17. Borrando fila con Flask-SQLAlchemy
- 18. nginx + uwsgi + matraz - deshabilitar páginas de error personalizadas
- 19. Cómo escribir para iniciar sesión en python con nginx + uwsgi
- 20. ¿Cómo implementar la aplicación Flask en Webfaction?
- 21. Ejecute la aplicación django en apache con uWSGI
- 22. no deseada HTTPS -> redirecciones HTTP con la aplicación nginx + + uwsgi frasco
- 23. PHP carga automática con SplClassLoader?
- 24. permisos socket uwsgi
- 25. página de recarga AJAX con POST
- 26. Django y Python + uWSGI
- 27. uWSGI problema host virtual
- 28. Cómo configurar Permitir la función de Actualización automática para mi aplicación en Play store
- 29. Django uwsgi error de importación
- 30. Recarga de la página Force con anclajes html (#) - HTML & JS
El enlace ya no está disponible – ricosrealm