gunicorn 소스 변경 시 자동 재로드
마지막으로 개발 환경을 runserver에서 gunicorn/nginx로 마이그레이션했습니다.
runserver의 자동 재로드 기능을 gunicorn으로 복제하여 소스가 변경될 때 서버가 자동으로 다시 시작되도록 하는 것이 편리합니다.그렇지 않으면 서버를 수동으로 재시작해야 합니다.kill -HUP.
수동으로 다시 시작하지 않을 방법이 있습니까?
이 질문은 오래된 질문이지만 버전 19.0 이후로 알아야 합니다.gunicorn선택권이 있습니다.따라서 이제 타사 툴이 필요하지 않습니다.
한 가지 옵션은 --max-requests를 사용하여 생성된 각 프로세스를 다음을 추가하여 하나의 요청만 처리하도록 제한하는 것입니다.--max-requests 1시작 옵션으로 이동합니다.새로 생성된 모든 프로세스는 코드 변경 사항을 확인해야 하며 개발 환경에서 요청당 추가 시작 시간은 무시해도 됩니다.
브라이언 헬미그가 이것을 고안해냈고 저는 이것을 사용하도록 수정했습니다.run_gunicorn시작하는 대신gunicorn직접적으로, 가상 환경이 활성화된 상태에서 이 세 가지 명령어를 django 프로젝트 루트 폴더의 셸에 잘라 붙여넣기만 하면 됩니다.
pip install watchdog -U
watchmedo shell-command --patterns="*.py;*.html;*.css;*.js" --recursive --command='echo "${watch_src_path}" && kill -HUP `cat gunicorn.pid`' . &
python manage.py run_gunicorn 127.0.0.1:80 --pid=gunicorn.pid
git push를 사용하여 운영 환경에 배포하고 git hooks를 설정하여 스크립트를 실행합니다.이 접근 방식의 장점은 마이그레이션과 패키지 설치를 동시에 수행할 수 있다는 것입니다.https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
mkdir -p /home/git/project_name.git
cd /home/git/project_name.git
git init --bare
그런 다음 스크립트를 만듭니다./home/git/project_name.git/hooks/post-receive.
#!/bin/bash
GIT_WORK_TREE=/path/to/project git checkout -f
source /path/to/virtualenv/activate
pip install -r /path/to/project/requirements.txt
python /path/to/project/manage.py migrate
sudo supervisorctl restart project_name
꼭 해주세요!chmod u+x post-receive사용자를 sudoers에 추가합니다.실행 허용sudo supervisorctl비밀번호 없이https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/
로컬/개발 서버에서 다음을 설정했습니다.git remote운영 서버에 푸시할 수 있습니다.
git remote add production ssh://user_name@production-server/home/git/project_name.git
# initial push
git push production +master:refs/heads/master
# subsequent push
git push production master
스크립트가 실행 중일 때 모든 프롬프트를 볼 수 있습니다.따라서 마이그레이션/패키지 설치/감독자 재시작에 문제가 없는지 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/12773763/gunicorn-autoreload-on-source-change
'codememo' 카테고리의 다른 글
| EXTRACT() Hour(24시간 형식) (0) | 2023.07.17 |
|---|---|
| numpy.array() 데이터를 올바르게 저장하고 로드하는 방법은 무엇입니까? (0) | 2023.07.17 |
| pythonNameError: 글로벌 이름 '__file_'이(가) 정의되지 않았습니다. (0) | 2023.07.17 |
| NumPy: max()와 min()을 동시에 사용하는 함수 (0) | 2023.07.17 |
| 각진 강한 유형의 반응형 (0) | 2023.07.17 |