Finalmente, migré mi entorno de desarrollo de runserver a gunicorn / nginx.
Sería conveniente replicar la función de recarga automática de runserver en gunicorn, para que el servidor se reinicie automáticamente cuando cambie la fuente. De lo contrario, tengo que reiniciar el servidor manualmente con kill -HUP
.
¿Alguna forma de evitar el reinicio manual?
kill -HUP
procesaría el PID, sino que usaría supervisorctl. Sin embargo, no creo que esto cambie mucho.Respuestas:
Si bien esta es una pregunta antigua, solo por coherencia, ya que la versión 19.0 gunicorn tiene la
--reload
opción. Así que no se necesitan más herramientas de terceros.fuente
killall -HUP procname
funcionará bien) para que se inicien nuevos trabajadores y se apaguen los antiguos.Una opción sería usar --max-request para limitar cada proceso generado a atender solo una solicitud agregando
--max-requests 1
opciones de inicio. Cada proceso recién generado debería ver cambios en su código y, en un entorno de desarrollo, el tiempo de inicio adicional por solicitud debería ser insignificante.fuente
pip
paquete de poder,watchdog
.A Bryan Helmig se le ocurrió esto y lo modifiqué para usarlo en
run_gunicorn
lugar de iniciarlogunicorn
directamente, para que sea posible simplemente cortar y pegar estos 3 comandos en un shell en la carpeta raíz de su proyecto django (con su virtualenv activado):fuente
127.0.0.1:80
, si es necesario.settings.py
,models.py
(se requiere migración) o el código fuente de alguna aplicación externa que no está en miswatchmedo
patrones.Utilizo git push para implementar en producción y configuro git hooks para ejecutar un script. La ventaja de este enfoque es que también puede realizar la migración y la instalación del paquete al mismo tiempo. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Luego crea un guión
/home/git/project_name.git/hooks/post-receive
.Asegúrese de hacerlo
chmod u+x post-receive
y agregue usuarios a los sudoers. Permita que se ejecutesudo supervisorctl
sin contraseña. https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Desde mi servidor local / de desarrollo, configuro
git remote
que me permite enviar al servidor de producciónComo beneficio adicional, podrá ver todas las indicaciones mientras se ejecuta el script. Entonces verá si hay algún problema con la migración / instalación del paquete / reinicio del supervisor.
fuente
#!/bin/bash
como se indicó anteriormente en lugar de#!/bin/sh
lo quepost-receive
tenía el ejemplo de Git !