2009-10-02 4 views
1

Python 2.4.3이 설치된 CentOS 5 (Apache 2.2.3) 서버에 mod_python 3.2.8을 설치 및 구성하기 만하면됩니다. 그것은 아파치에 의해 잘로드된다.Mod_python은 출력을 생성하지 않습니다

mpinfo 테스트 페이지가 활성화되어 작동합니다. 그래서 다음 코드를 사용하여 간단한 "Hello World"를 작성했습니다.

from mod_python import apache 

def handler(req): 
    req.content_type = 'text/plain' 
    req.write("Hello World!") 
    req.flush() 
    return apache.OK 

텍스트가없고 소스가없는 빈 페이지가 출력됩니다.

Mod_python error: "PythonHandler mod_python.cgihandler" 

Traceback (most recent call last): 

    File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch 
    result = object(req) 

    File "/usr/lib/python2.4/site-packages/mod_python/cgihandler.py", line 96, in handler 
    imp.load_module(module_name, fd, path, desc) 

    File "/var/www/vhosts/localhost/httpdocs/mptest.py", line 3 

    def handler(req): 

    ^

SyntaxError: invalid syntax 

내가 다른 자습서, FAQ 및 문제를 탐색 약 5 시간을 보냈습니다 : 나는 의식적으로 (내가 "DEF"앞에 공백을 넣을 때) 내가 예를 들어, URL에 오류 출력을 얻을 구문 오류를 생성하는 경우 촬영 가이드는 있지만이 문제에 대한 설명을 찾을 수 없습니다.

문제점/원인이 무엇이라고 생각하십니까?

편집 : 여기 사이트의 아파치 구성입니다 ...

<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 

    AddHandler mod_python .py 
    PythonHandler mptest 
    PythonDebug On 
</Directory> 

편집 2 : 아, 내가 얘기를 깜빡 했네요 또 다른 한가지는 내가 아파치 확장을 작성하여 mod_python을 사용하려는 것입니다 . 응용 프로그램 자체는 PHP로 작성되었지만 서버에 몇 가지 보안 트위크를 만들어야합니다.

+0

명확하게하기 위해 문제는 오류 메시지가 아니지만 출력이 생성되지 않습니다. – Christoffer

+0

<디렉토리/var/www/vhosts/localhost/httpdocs> – gimel

+0

을 가리 키도록 아파치 구성 섹션을 수정하십시오. 아마도 아파치 오류 로그를 살펴 보는 것이 도움이 될 것입니다 ... – fraca7

답변

2

mod_python을 사용하지 마십시오.

일반적인 실수로 mod_python을하는 것입니다 "mod_php하지만, 파이썬은"그것은 사실 없습니다. mod_python은 웹 애플리케이션이 아닌 아파치 확장 기능을 작성하는 데 더 적합합니다.

WSGI은 파이썬 웹 응용 프로그램과 웹 서버 (Apache뿐만 아니라)간에 사용하는 프로토콜입니다. 이를 사용하면 모든 wsgi 호환 웹 서버에 응용 프로그램을 게시 할 수 있습니다. (대부분의 최신 웹 서버는 wsgi 호환입니다.)

아파치에서는 대신 mod_wsgi을 사용하십시오. 아파치에 WSGI 표준 및 mod_wsgi을 사용하여 다시 작성

귀하의 예 :

mywebapp.py :

def application(environ, start_response): 
    start_response('200 OK', [('content-type', 'text/plain')]) 
    return ['Hello World'] 

아파치 구성 :

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/mywebapp.py 
<Directory /usr/local/www/wsgi-scripts> 
    Order allow,deny 
    Allow from all 
</Directory> 

지금 바로 http://localhost/myapp로 이동하고 스크립트가 실행됩니다. 또한이 루트 (예 : http://localhost/myapp/stuff/here) 아래의 모든 액세스는이 스크립트에 의해 처리됩니다.

웹 프레임 워크를 선택하는 것이 좋습니다. CherryPy. Pylons. Django. 그들은 일을 더 쉽게 만듭니다.

보는 좋은 웹 사이트는

+0

아, 또 다른 사실은 mod_python을 사용하여 Apache 확장을 작성한다는 것입니다. 응용 프로그램 자체는 PHP로 작성되었지만 서버에서 som 보안 tweeks를 만들 필요가 있습니다. 그러나 저는 곧 파이썬을 통한 웹 개발에 대해 더 많은 실험을 할 것이며 다음 장고를 사용할 것입니다. 정보 주셔서 감사합니다. 그것은 미래의 애플 리케이션을위한 도움이 될 것입니다 :) – Christoffer

0

wsgi.org 내가 선명도에 대한 완전히 새로운 답을 할 것입니다 ...

대신 mod_wsgi를 설치하기로 결정했습니다. 그래서 나는 그것을 설정했고 테스트 파일에 갈 때 나는 페이지 소스 만 보았다. 난 아직이 문제를 찾는 데 모든 시간을 소비하지 않은, 그래서 하나가 문제를 해결하거나 좀 더 도움 :)

당신 :

+0

좋아요, 그래서 정확히 (내 서버에 맞게 tweeks로) nosklo가 mod_wsgi 2.6으로 제안한 것을 프로젝트 웹 사이트의 가이드에 따라 설치했습니다. 하지만 내 testapp의 출력은 파이썬 소스 코드입니다. Google을 통해 도움말을 찾지 못했습니다. 어떻게 생각해? – Christoffer

+1

@Christoffer :'.py' 파일을 웹 루트에 넣지 마십시오. '.py' 파일은'/ var/www'의 바깥에있는 다른 폴더에 있어야합니다. 이 예제에서는'/ usr/local/www/wsgi-scripts'를 선택했습니다. 'WSGIScriptAlias' 아파치 설정 옵션은 서버로부터 요청되어야하는 경로와 실행될 스크립트 사이의 다리 역할을합니다. 그래서'http : // yourserver/path/thescript.py'에 접근하는 대신' http : // yourselver/pathdefinedinconfig /'. 이 예제에서 내 대답은'http : // server/myapp'이다. **는 스크립트의 이름이 아니어도 **. – nosklo

+0

아하 :) 이제 작동합니다! 정말 고맙습니다! – Christoffer

1

감사가 필요하다고 결정할 때 당신에게 다시 얻을 것이다 귀하의 원래의 문제는 요청을 처리하기 위해 mod_python.cgihandler가 호출되고 있다는 것입니다. 이것은 Python 스크립트 파일이 CGI 스크립트로 해석되고 있음을 의미합니다. 따라서 아무 것도 반환하지 않는 것은 놀라운 일이 아닙니다.

mod_python.cgihandler를 사용하도록 설정 한 Apache 구성에 충돌하는 정의가있을 수 있습니다.

관련 문제