Problema con django en producción que no actualiza los cambios

603 views
Skip to first unread message

Nicolas Malbran

unread,
Dec 6, 2012, 12:38:51 AM12/6/12
to pytho...@googlegroups.com
Hola, como están?

Tengo una aplicación en django, corriendo en AWS con nginx, gunicorn y supervisor. Y el problema es que cuando actualizo el código fuente (ya sea desde git o cambiando los archivos por linea de comando) y reinicio gunicorn con supervisor, los cambios no se actualizan realmente.

Probé limpiar el cache de django, borrar los *.pyc, reiniciar supervisor y no pasa nada. Lo único que funciona es reiniciar la instancia, pero cero gracia tener que reiniciarla cada vez que cambio algo.

Por mucho que busco, no encuentro que puede ser. El comando que tiene configurado supervisor es un script hecho por mi, que activa el virtalenv, cd a la carpeta e inicia gunicorn.

Otro comportamiento muy raro (que aun no me causa problemas...creo) es que en algunos casos (no lo he confirmado 100%, pero cuando reinicio la aplicación con supervisorctl) el proceso de gunicorn se reinicia a cada rato (cada 6 sec aprox).

Que podrá ser? alguna idea?

Muchas Gracias de antemano,
Saludos!

Nicolás Malbrán

Alejandro Varas G.

unread,
Dec 6, 2012, 8:35:44 AM12/6/12
to pytho...@googlegroups.com
Hola
Se me ocurre que los procesos de gunicorn no estén muriendo cuando lo
reinicias con supervisor. Puedes probar mirando en top si los procesos
mueren o no cuando los reinicias.
Saludos

2012/12/6 Nicolas Malbran <nmal...@gmail.com>:
> --
> --
> You received this message because you are subscribed to the Google
> Groups "PythonChile" group.
> To post to this group, send email to chile...@googlegroups.com
> To unsubscribe from this group, send email to
> chilepython...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/chilepython?hl=en?hl=es
> ---------------------------------------
> Web: http://www.pythonchile.cl
> Twitter: http://twitter.com/PythonChile
>
>
>



--
Alejandro Varas G.
http://alejandrovaras.me

Nicolas Malbran

unread,
Dec 6, 2012, 8:59:47 AM12/6/12
to pytho...@googlegroups.com
Efectivamente, eso era. Muchas Gracias!
Con top no se veía mucho, pero con "ps -fea | grep python" quedaban varios procesos dando vuelta. Si los mato todo y reinicio supervisor todo funciona como esperado.
Lo que si, no se porque hay tantos procesos y solo deberian haber 3 (2 apps + un celery).
Voy a seguir investigando


Nicolás Malbrán
Egresado de Ingeniería Civil en Computación
Universidad de Chile fcfm
Cel: (569) 979 741 64

Vijay Khemlani

unread,
Dec 6, 2012, 10:33:05 AM12/6/12
to pytho...@googlegroups.com
Ojo con el celery, si haces cambios en los códigos de los tasks tienes que reiniciar los workers ademas del servidor para que pesquen los cambios.


2012/12/6 Nicolas Malbran <nmal...@gmail.com>

Pedro Burón

unread,
Dec 6, 2012, 11:47:16 AM12/6/12
to pytho...@googlegroups.com

pero con él restart de supervisord debería funcionar, fíjate en la configuración

lo de los varios procesos es porque seguramente tiene un -w 3 él comando de gunicron

Enviado desde mi móvil

Nicolas Malbran

unread,
Dec 10, 2012, 3:40:08 PM12/10/12
to pytho...@googlegroups.com
Wena, No había podido ver esto.
Voy a revisarlo y les cuento como me fue.

Muchas Gracias!


Nicolás Malbrán
Egresado de Ingeniería Civil en Computación
Universidad de Chile fcfm
Cel: (569) 979 741 64



Nicolas Malbran

unread,
Dec 14, 2012, 9:53:50 AM12/14/12
to pytho...@googlegroups.com
Logre arreglarlo.

Lo que tenia antes era que supervisor llamaba a un script.sh mio que hacia:
source del virtualenv
cd /proyecto
python manage.py run_gunicorn

El problema es que no actualizaba los cambios del codigo con un "supervisorctl restart proyecto". Por alguna razon, supervisor no podia controlar los procesos invocados por el script.sh.

Ahora lo cambie a que supervisor llama al comando gunicorn_django --config=gunicon.conf.py (logre hacerlo funcionar despues de un rato) y ahora si, todo funciona como esperado.

Muchas gracias por su ayuda!


Nicolás

Pedro Burón

unread,
Dec 14, 2012, 10:10:59 AM12/14/12
to pytho...@googlegroups.com
Si supervisord no es el que crea el proceso directamente, no lo controla. Tienes que saber el pid entre otras cosas. Recuerda agregarle workers 2*core + 1 al menos.

-.-. .... .- ---
Pedro Burón Valencia
CTO at Witoi.com



2012/12/14 Nicolas Malbran <nmal...@gmail.com>

Nicolas Malbran

unread,
Dec 14, 2012, 10:12:54 AM12/14/12
to pytho...@googlegroups.com
Sip, eso ya lo tenia (por eso aparecían mas procesos con "ps -fea | grep python" ) pero no podía controlarlos bien.


Nicolás

German Larrain

unread,
Dec 14, 2012, 6:19:16 PM12/14/12
to pytho...@googlegroups.com
Pedro, ¿qué recomiendas para cantidad de workers? Es bastante común la fórmula 2*cores + 1, pero hay casos donde resulta más debatible quizás. Por ejemplo, en EC2, las instancias micro y small son de 1 core, pero la segunda tiene el triple de memoria RAM...
Reply all
Reply to author
Forward
0 new messages