현재 Apache 2.2.15 및 mod_wsgi 3.2와 함께 Centos 6.4 서버를 실행하고 있습니다. 서버가 장고 기반 사이트 (django 1.5.1, python 2.6.6)를 호스팅하고 있습니다. pip를 통해 scipy 0.12.0을 설치할 때까지 모든 것이 잘 작동했습니다. 이제 django 앱을로드하려고하면 서버가 응답하지 않고 생성 된 자식 httpd 프로세스가 중단 된 것처럼 보입니다. 내 로그 (/ var / logs / httpd / error_log, 내 vhost error.log 및 시스템 로그)를 살펴보면 오류가 발생하지 않습니다.
django manage.py 쉘을 통해 모델 등을로드하면 모든 것이 잘 작동하므로 mod_wsgi 문제라고 생각하게됩니다.
이 문제를 해결하는 방법에 대한 생각이 있습니까?
답변
C 확장 모듈을 사용하는 Python 용 일부 타사 패키지 (scipy 및 numpy 포함)는 Python 기본 인터프리터에서만 작동하며 기본적으로 기본 인터프리터에서는 mod_wsgi로 사용할 수 없습니다. 스레드 교착 상태, 잘못된 동작 또는 프로세스 충돌이 발생할 수 있습니다. 이에 대한 자세한 내용은 다음과 같습니다.
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API
임시 해결책은 다음을 사용하여 WSGI 응용 프로그램을 프로세스의 기본 해석기에서 강제로 실행하는 것입니다.
WSGIApplicationGroup %{GLOBAL}
동일한 서버에서 여러 WSGI 응용 프로그램을 실행하는 경우 일부 프레임 워크에서는 여러 인터프리터에서 여러 인스턴스를 실행할 수 없으므로 데몬 모드를 사용하여 조사를 시작하려고합니다. Django의 경우입니다. 따라서 데몬 모드를 사용하여 각각 자체 프로세스에 있도록하고 각 데몬 모드 프로세스 그룹의 기본 인터프리터에서 각각 실행되도록하십시오.
답변
WSGI를 구성하는 방식에 맞는 다른 솔루션은 다음과 같이 변경되었습니다 WSGIScriptAlias
.
WSGIDaemonProcess website user=user group=group python-path=/path/to/venv/website:/path/to/venv/lib/python2.7/site-packages
WSGIScriptAlias /website /path/to/venv/website/wsgi.py process-group=website application-group=%{GLOBAL}
<Location /website>
WSGIProcessGroup website
</Location>
<Directory /path/to/venv/website>
WSGIScriptReloading On
<Files wsgi.py>
Allow from all
Require all granted
</Files>
</Directory>
속성에 주목
process-group=website application-group=%{GLOBAL}
보통 필요하지 않은