2011-08-18 24 views
7

¿Existe una estrategia de implementación de código canónico para la implementación de aplicaciones web basadas en tornado? Nuestra configuración actual es 4 procesos de tornado detrás de NginX? (Nuestro caso de uso específico está detrás de EC2.)Implementación de código Tornado

Actualmente tenemos una solución que funciona lo suficientemente bien, mediante la cual lanzamos los cuatro procesos de tornado y guardamos los PID en un archivo en/tmp /. Tras el despliegue de nuevo código, corremos la siguiente secuencia a través de la tela:

  1. Hacer un git pull de la rama prod.
  2. Retire la máquina del equilibrador de carga.
  3. Espere a que todas las conexiones en vuelo terminen con un sueño.
  4. Elimina todos los tornados en el archivo pid y elimina todos los archivos * .pyc.
  5. Reinicia los tornados.
  6. Vuelva a conectar la máquina al equilibrador de carga.

Hemos tomado algo de inspiración de esto: http://agiletesting.blogspot.com/2009/12/deploying-tornado-in-production.html

¿Hay otras soluciones completas por ahí?

Respuesta

0

No he implementado Tornado en producción, pero he estado jugando con Gevent + Nginx y he estado usando Supervisord para la gestión de procesos - inicio/detención/reinicio, registro, supervisión - supervisorctl es muy útil para esto. Como dije, no es una solución de implementación, sino una herramienta que vale la pena usar.

1

Administramos Tornado + Nginx con supervisord como supervisor.

de configuración de ejemplo (nombres cambiados)

[program:server] 
process_name = server-%(process_num)s 
command=/opt/current/vrun.sh /opt/current/app.py --port=%(process_num)s 
stdout_logfile=/var/log/server/server.log 
stderr_logfile=/var/log/server/server.err 
numprocs = 6 
numprocs_start = 7000 

todavía tengo que encontrar la "mejor" para reiniciar las cosas, lo que probablemente voy a hacer es tener finalmente Nginx tiene un archivo "activo", que es actualizado para que HAProxy sepa que estamos jugando con la configuración, luego espere un poco, cambie las cosas, luego vuelva a habilitar todo.

Estamos usando Capistrano (tenemos una tarea de retraso acumulado para mover a Fabric), pero en lugar de ocuparnos de eliminar los archivos * .pyc, enlazamos/activamos/actualizamos el identificador de la versión.