2011-03-11 6 views
3

mod_wsgi가 설치된 Apache2가 실행 중입니다. 나는 mod_wsgi가 실제로 this에 따라 작동하는지 확인했다.Apache + mod_wsgi에서 피라미드를 실행하려고했지만 실패했습니다

피라미드를 실행하려고 할 때 문제가 발생합니다. 나는 내부 서버 오류를 얻을 내 아파치 오류 로그는 예외가 포함되어 여기

AssertionError: The EvalException middleware is not usable in a multi-process environment 

내 가상 호스트의 :

여기
<VirtualHost *:80> 
    ServerName pyramidtest.dev 
    DocumentRoot /srv/pyramidtest.dev/www/ 
    AssignUserID pyramidtest nogroup 
    WSGIScriptAlias//srv/pyramidtest.dev/pyramid/load.wsgi 
</VirtualHost> 

이야 내 load.wsgi :

import site 
site.addsitedir('/opt/pyramid/lib/python2.7/site-packages') 

from pyramid.paster import get_app 

application = get_app('/srv/pyramidtest.dev/pyramid/test/development.ini', 'main') 

mod_wsgi에이 /opt/python2.7를 사용하여 컴파일 파이썬 인터프리터로서 그러나 나는 가상의 밑에 피라미드를 달리고있다 /opt/pyramid - 이것은 내가를 가지고있는 이유 다. 내 load.wsgi에 0. 이 필요한 경우

그리고, apache2 -V :

Server version: Apache/2.2.9 (Debian) 
Server built: Dec 30 2010 11:50:24 
Server's Module Magic Number: 20051115:15 
Server loaded: APR 1.2.12, APR-Util 1.2.12 
Compiled using: APR 1.2.12, APR-Util 1.2.12 
Architecture: 32-bit 
Server MPM:  ITK 
    threaded:  no 
    forked:  yes (variable process count) 
Server compiled with.... 
-D APACHE_MPM_DIR="server/mpm/experimental/itk" 
-D APR_HAS_SENDFILE 
-D APR_HAS_MMAP 
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) 
-D APR_USE_SYSVSEM_SERIALIZE 
-D APR_USE_PTHREAD_SERIALIZE 
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT 
-D APR_HAS_OTHER_CHILD 
-D AP_HAVE_RELIABLE_PIPED_LOGS 
-D DYNAMIC_MODULE_LIMIT=128 
-D HTTPD_ROOT="" 
-D SUEXEC_BIN="/usr/lib/apache2/suexec" 
-D DEFAULT_PIDLOG="/var/run/apache2.pid" 
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status" 
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock" 
-D DEFAULT_ERRORLOG="logs/error_log" 
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types" 
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf" 

내가 무슨 말이냐 ...?

답변

6

오류 메시지에서 볼 수 있듯이 EvalException 미들웨어를 사용하고 있습니다. 이 오류에 대한이 해결책은 실제로 mod_wsgi의 Debugging Techniques wiki에서 다룹니다.

기본적으로 미들웨어는 응용 프로그램의 브라우저 기반 대화식 디버깅을 허용하므로 모든 요청을 동일한 프로세스로 보내야합니다. 그러나 임베디드 모드에서 mod_wsgi를 실행하면 기본적으로 많은 프로세스를 생성 할 수 있습니다. 당신이 이 mod_wsgi에 임베디드 모드에서 응용 프로그램을 실행하는 경우,이 브라우저 기반의 대화 형 디버거를 사용할 수 있도록하기 위해서는

[...], 당신이 필요합니다 : 위키에서

은 요청을 처리하기 위해 하나의 하위 프로세스를 시작하고 추가 프로세스는 전혀 생성하지 않도록 Apache를 구성하십시오. Apache 설정 지시문이 인 경우 다음과 같습니다. 모드를 데몬으로 전환

StartServers 1 
ServerLimit 1 

(하나의 프로세스는 기본)도이 문제를 해결하며, 포함 된 모드로 실행 이상을 권장합니다. 다음은 Apache 지시문입니다.

mod_wsgi는 경로를 파이썬 경로에 추가 할 수도 있습니다. 포함 된 모드를 사용하는 경우 다음을 사용할 수 있습니다

WSGIPythonPath /opt/pyramid/lib/python2.7/site-packages 

데몬 모드를 사용하는 경우, 대신 WSGIDaemonProcess 지시어에 '파이썬 경로'옵션을 사용합니다.

WSGIDaemonProcess pyramidtest.dev display-name=%{GROUP} python-path=/opt/pyramid/lib/python2.7/site-packages 
WSGIProcessGroup pyramidtest.dev 
+0

환호성에 대한 환호. 나는 당신의 충고에 따라'WSGIDaemonProcess'와'WSGIProcessGroup' 지시어를 내 VHost에 넣었습니다.예외는 이제 사라졌지 만이 오류가 발생합니다 :'(13) 권한 거부 : mod_wsgi (pid = 17417) : WSGI 데몬 프로세스 'pyramidtest.dev'에 연결할 수 없습니다/var/run/apache2/wsgi.17384.0.1.sock 'multiple attempts.y' – dave

+0

@jim : 그 내용은 [wiki] (http://code.google.com/p/modwsgi/wiki/ConfigurationIssues#Location_Of_UNIX_Sockets)에서 다룹니다.) 통신에 사용 된 UNIX 소켓 파일에는 기본 디렉토리가 잠겨 있기 때문에 올바른 권한이 없습니다. 당신은'WSGISocketPrefix' 지시어를 사용하여 올바른 권한을 가진 디렉토리를 지정할 수 있습니다. 위키에서 좋은 소켓 경로에 대한 제안을 읽어보십시오. ("run/wsgi"은 종종 잘 작동합니다.) – Cameron

+0

'/ var/log/wsgi /'디렉토리를 설정했고 모두 읽을 수 있습니다. 그런 다음 WSGISocketPrefix를'httpd.conf'에 추가 했으므로 (가상 호스트에서는 허용되지 않음) 여전히 실패하고 있습니다. 나는 [여기] (http://code.google.com/p/modwsgi/wiki/ConfigurationIssues)에서 지침을 얻었습니다. – dave

관련 문제