2011-04-22 11 views
12

Tengo un comportamiento incoherente de recarga de código, con una aplicación Django 1.3 y gunicorn 0.12.1, ejecutándose dentro de un virtualenv.Gunicorn no vuelve a cargar una aplicación de Django

Gunicorn no recarga mi aplicación correctamente, incluso con un reinicio específico del proceso PIC de gunicornio. Cuando ejecuto un runserver básico (a través de Django, a través del comando manage.py) esto no es un problema.

Cuando elimino y vuelvo a crear mi virtualenv, gunicornio funciona como se espera con el nuevo código.

¿Hay un caché de Python o algo así? También traté de eliminar todos los archivos *.pyc.

Respuesta

6

Prueba esto:

$ kill -HUP masterpid 

También, echar un vistazo a algunas de las notas en la parte inferior de la following post.

4

Me encontré con variaciones de este problema también, como se aconseja en el artículo vinculado por el Sr. Pokomy, matar el proceso maestro de gunicornio con una señal HUP parece hacer el truco.

Uno puede configurar la recarga automática en el archivo guardar fácilmente, si utiliza el módulo python watchdog; la configuración es bastante explica por sí mismo, así que aquí está un fragmento de mi desarrollo supervisord.conf archivo:

[program:ost2] 
autostart=true 
command=/usr/local/share/python/gunicorn --debug\ 
-c /Users/fish/Dropbox/ost2/ost2/utils/gunicorn/ost2-debug.py wsgi_debug 
directory=/Users/fish/Dropbox/ost2/ost2 
priority=500 
; (etc) 

[program:ost2-reloader] 
autostart=true 
autorestart=false 
directory=/tmp 
command=/usr/local/share/python/watchmedo shell-command\ 
--patterns="*.py;*.txt;*.html;*.css;*.less;*.js;*.coffee"\ 
-R --command='kill -HUP $(cat /usr/local/gunicorn/gunicorn.pid)'\ 
/Users/fish/Dropbox/ost2/ost2/ 
priority=996 
; (etc) 

(NB I puso entre las dos barras en esa muestra antes de los saltos de línea que no están realmente en el archivo conf - Inserté esas líneas nuevas para la legibilidad; no estoy seguro si eso funciona IRL)

El primer programa es el proceso de gunicornio, que ejecuto en un solo hilo durante el desarrollo para utilizar el depurador Werkzeug. La segunda parte es la parte interesante: el comando dice: "mata el proceso especificado por el archivo PID de Gunicorn siempre que haya un cambio en un archivo en este árbol de directorios si el sufijo del archivo coincide con uno de esta lista".

Funciona como un encanto para muchos incluyéndome a mí. Si no lo sabe, watchdog es muy útil y vale la pena verlo, por derecho propio.

+1

Esto es genial, y si está usando un supervisor para administrar gunicornio, puede reemplazar su comando cat con: supervisorctl status gunicorn_task_name | sed-e 's /.* pid \ ([0-9] \ {1,5 \} \). */\ 1/g' –

Cuestiones relacionadas