나는 Anpite 플레이 북을 사용하여 만든 Django/Gunicorn/Nginx 웹 사이트를 가지고 있습니다. 현재 새로운 기능을 추가하거나 버그를 수정하고 장고 코드를 다시로드하려고 할 때마다 실행해야하는 작업을 내 플레이 북에서 태그 지정하는 중입니다. 내 목표는 프로덕션 서버를 다운시키지 않고 준비 서버에서 테스트 한 즉시 그러한 변경을 프로덕션으로 보낼 수있게하는 것입니다.500 서버 오류없이 Django 웹 사이트를 다시로드 하시겠습니까?
내 플레이 북은 현재 프로덕션으로 변경 사항을 푸시 할 때마다 전체 웹 사이트 디렉토리를 삭제하고 Pip 가상 환경을 다시 작성하여 남은 "cruft"가 없도록합니다. 문제는 Anabilities 게임을 실행할 때 웹 사이트 디렉토리를 삭제할 시점에 순간 500 서버 오류가 발생한다는 것입니다. 그런 다음 Github에서 코드를 체크 아웃하는 다음 작업이 실행되면 오류가 사라집니다. 분명히, 내가 코드베이스를 다시로드 할 때마다, 어떤 사용자가 작업이 실행되는 순간에 내 웹 사이트를 때리면이 500 오류도 발생합니다. 일단 Gunicorn이 시작되고 장고 코드가 메모리에로드되면 코드를 삭제하고 다시로드하고 서비스 중단없이 Gunicorn을 다시 시작할 수 있다고 생각했습니다. 이 다른 Stackover question은 그럴 것 같습니다. 그러나, 나의 테스트는 달리 지적한다.
클라이언트 브라우저가 장고에 요청을 보내면 장고는 모든 .pyc 파일을 메모리에 다시로드합니까? 이 문제의 원인은 무엇입니까? 이전 코드를 삭제하는 작업을 제거하지 않고 장고 코드를 다시로드 할 때이 일시적인 정전을 방지 할 수있는 방법이 있습니까?
은 여기 내 Ansible 플레이 북에서 발췌 :
- name: configure web server
hosts: webservers
gather_facts: True
tasks:
# This task causes momentary 500 server error
- name: delete any existing project repo
file: >
path={{ repo_path }}
state=absent
tags: reload
- name: check out {{ repo_version }} of Github repo
git: >
repo={{ repo_url }}
version={{ repo_version }}
dest={{ repo_path }}
accept_hostkey=yes
register: checkout
until: checkout|success
retries: 5
delay: 10
become: true
become_user: "{{ me }}"
tags: reload
# ... more tasks
- name: install python packages into virtual environment
pip: >
requirements={{ repo_path }}/requirements/{{ server_tier }}.txt
state=present
virtualenv={{ venvs_path }}/{{ commit_hash }}
tags: reload
# ... more tasks
- name: reload gunicorn
command: pkill -HUP gunicorn
become: true
become_user: root
tags: reload
왜 저장소를 삭제 하시겠습니까? 자식은 부실 파일 삭제를 처리해야합니다. 남은 것은 무엇입니까? 부실 pip 패키지? –
새로운 코드베이스에서 시작했는지 확인하려면 최상위 웹 사이트 디렉토리의 모든 것을 삭제하는 것이 가장 좋을 거라는 제 믿음이었습니다. 나는 YouTube에서 발견 한 링컨 루프 (Lincoln Loop)의 "Django Deployments Done Right"라는 조언에 충실하려고 노력했습니다. Git이 새로운 디렉토리를 체크 아웃 할 때 존재하지 않는 모든 파일을 내 디렉토리에서 제거 할 수도 있다고 생각하지 않았습니다. 그러나 아직도, 왜이 문제를 할 것입니까? 어쨌든 모든 것이 기억에 남아 있지 않습니까? Gunicorn을 다시로드 할 때까지 웹 사이트에서 디스크를 보는 이유는 무엇입니까? – William
로드 밸런서에서이를 처리하십시오. – browskie