소스 변경시 gunicorn 자동 새로 고침
마지막으로 개발 환경을 runserver에서 gunicorn / nginx로 마이그레이션했습니다.
runserver의 자동 재로드 기능을 gunicorn에 복제하는 것이 편리하므로 소스가 변경되면 서버가 자동으로 다시 시작됩니다. 그렇지 않으면 수동으로 서버를 다시 시작해야합니다 kill -HUP
.
수동 재시작을 피할 수있는 방법이 있습니까?
이것은 오래된 질문이지만 일관성을 위해 버전 19.0 gunicorn에는 --reload
옵션 이 있습니다. 따라서 더 많은 타사 도구가 필요하지 않습니다.
한 가지 옵션은 --max-requests 를 사용 --max-requests 1
하여 시작 옵션 에 추가 하여 생성 된 각 프로세스를 하나의 요청 만 제공하도록 제한하는 것 입니다. 새로 생성 된 모든 프로세스는 코드 변경 사항을 확인해야하며 개발 환경에서는 요청 당 추가 시작 시간이 무시할 수 있어야합니다.
Bryan Helmig 가 이것을 생각 해냈고 직접 run_gunicorn
실행 하는 대신 사용하도록 수정 gunicorn
하여 django 프로젝트 루트 폴더 (virtualenv가 활성화 된 상태)의 셸에이 3 개의 명령을 잘라내어 붙여 넣을 수 있습니다.
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
'Programing' 카테고리의 다른 글
Powershell.exe (v 2.0) 경로 (0) | 2020.08.13 |
---|---|
클래스 메소드를 생성하기 위해 define_method를 어떻게 사용합니까? (0) | 2020.08.13 |
파이썬 사전을 csv 파일에 어떻게 작성합니까? (0) | 2020.08.13 |
조건부 바인딩 : 오류가 발생한 경우 – 조건부 바인딩의 이니셜 라이저에는 선택적 유형이 있어야합니다. (0) | 2020.08.13 |
다른 값을 기준으로 한 벡터를 정렬하는 방법 (0) | 2020.08.13 |