2009-07-03 2 views
8

Apache + mod_python에서 Django 응용 프로그램을 실행하고 있습니다. 코드를 약간 변경하면 때때로 아파치를 재시작하기 전까지 즉시 효과가 나타나고 그렇지 않은 경우에는 효과가 있습니다. 그러나 다른 제품을 실행하는 프로덕션 서버이기 때문에 실제로 그렇게하고 싶지는 않습니다. 거기에 강제로 다른 방법이 있습니까?Apache + mod_python에서 실행중인 Django 응용 프로그램 다시 시작

사람들이 잘못 이해하는 것을 볼 수 있기 때문에, 나는 생산 환경에 대해 이야기하고 있습니다. 개발을 위해 나는 Django의 개발 서버를 사용하고 있습니다.

답변

15

가능하면 mod_wsgi로 전환해야합니다. 이제 Django를 지원하는 recommended way이며 메모리 및 서버 리소스 측면에서 훨씬 효율적입니다.

mod_wsgi에서 각 사이트에는 .wsgi 파일이 있습니다. 사이트를 재시작하려면 관련 파일 touch 만 입력하면 해당 코드 만 다시로드됩니다.

+0

나는 FastCGI와 함께했던 모든 문제 (이건 Lighttpd 였지만 여전히)를 겪은 후에이 XXgi 것들에 대해 조금 두려워한다. http://stackoverflow.com/questions/393637/django-fastcgi-randomly-raising- operationalerror. wsgi가 장고를 지금 배포하는 데 권장되는 방법인지 알지 못했습니다. 이전에는 mod_python이었습니다. 어쨌든, 나는 그것을 조사 할 것이다. 감사! – ibz

+0

s/this things/these things/:) – ibz

+2

다른 곳에서 언급했듯이 mod_wsgi 데몬 모드를 사용하여 WSGI 스크립트 파일을 터치 할 때 다시 불러 오기 기능을 사용해야합니다. –

-1

장고에 포함 된 테스트 서버를 사용하십시오. (예 : ./manage.py runserver 0.0.0.0:8080) 개발 중에 필요한 대부분의 작업을 수행합니다. 유일한 단점은 멀티 스레딩에서 동시 요청을 처리 할 수 ​​없다는 것입니다.

아파치의 최대 인스턴스를 1로 설정하여 모든 코드 변경 사항이 즉시 반영되도록하는 트릭이 있다고 들었지만 다른 서비스를 실행 중이라고 말했기 때문에 귀하의 사례가 아닐 수도 있습니다.

+0

저것을 httpd.conf에서 설정 "MaxRequestsPerChild 값 1": 모든 세부 사항은에서 찾을 수 있습니다. – agiliq

0

httpd.conf 파일에서 "MaxRequestsPerChild 1"을 설정하여 연결 수를 1로 줄일 수 있습니다. 그러나 테스트 서버에서만 수행하고 생산에서는 수행하지 마십시오. 기존의 모든 연결이 완료 허용됩니다 -

또는

여전히 기존 연결을 죽이고 싶지 않은 경우

는 "정상적으로은 apache2ctl"을 수행하여 "정상적으로"다시 시작할 수 있습니다 아파치를 다시 시작합니다.

+0

"apache2ctl gracefully"은 깔끔한 것 같습니다. 그것이 정확하게 내가 무엇을 찾고 있었는지는 모르지만, 분명히 그것을 들여다 볼 것입니다. 팁 고마워! – ibz

4

다른 사람들이 제안했듯이 mod_wsgi를 대신 사용하십시오. 자동 재로드 기능을 사용하려면 WSGI 스크립트 파일을 터치하거나 코드 변경 사항을 찾는 모니터를 통해 UNIX에서 데몬 모드를 사용해야합니다. 임베디드 모드를 사용할 때 약간의 손을 사용하여 Windows에서 동일한 작업을 수행 할 수 있습니다. zdmytriv으로 말했지만, 어떤로드를 처리 사이트에 대해이 작업을 수행하지 않는

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

관련 문제