Por fim, migrei meu env de desenvolvimento de runserver para gunicorn / nginx.
Seria conveniente replicar o recurso autoreload de runserver para gunicorn, para que o servidor reinicie automaticamente quando a fonte mudar. Caso contrário, preciso reiniciar o servidor manualmente com kill -HUP
.
Alguma maneira de evitar a reinicialização manual?
kill -HUP
o PID do processo, mas usaria o supervisorctl. Mas não pense que isso muda muito.Respostas:
Embora esta seja uma questão antiga, apenas para consistência - desde a versão 19.0 o gunicorn tem
--reload
opção. Portanto, nenhuma ferramenta de terceiros precisava de mais.fonte
killall -HUP procname
funcionará bem) para que novos trabalhos sejam iniciados e os antigos desligados sem problemas.Uma opção seria usar --max-requisições para limitar cada processo gerado para servir apenas uma requisição adicionando
--max-requests 1
opções de inicialização. Cada processo recém-gerado deve ver suas alterações de código e, em um ambiente de desenvolvimento, o tempo extra de inicialização por solicitação deve ser insignificante.fonte
pip
pacote capazwatchdog
,.Bryan Helmig veio com isso e eu modifiquei para usar em
run_gunicorn
vez de iniciargunicorn
diretamente, para tornar possível apenas recortar e colar esses 3 comandos em um shell na pasta raiz do seu projeto django (com seu virtualenv ativado):fonte
127.0.0.1:80
, se necessário.settings.py
,models.py
(migração necessária) ou o código-fonte de algum aplicativo externo que não está em meuswatchmedo
padrões.Eu uso o git push para implantar na produção e configurar git hooks para executar um script. A vantagem dessa abordagem é que você também pode fazer a migração e a instalação do pacote ao mesmo tempo. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Em seguida, crie um script
/home/git/project_name.git/hooks/post-receive
.Certifique-se de
chmod u+x post-receive
adicionar o usuário ao sudoers. Permita que ele seja executadosudo supervisorctl
sem senha. https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Do meu servidor local / de desenvolvimento, eu configurei o
git remote
que me permite enviar para o servidor de produçãoComo um bônus, você verá todos os prompts enquanto o script está sendo executado. Portanto, você verá se há algum problema com a migração / instalação do pacote / reinicialização do supervisor.
fonte
#!/bin/bash
conforme mencionado acima, em vez de#!/bin/sh
opost-receive
exemplo do Git !