Mod_python没有输出
我刚在一台运行CentOS 5(Apache 2.2.3)和Python 2.4.3的服务器上安装并配置了mod_python 3.2.8。Apache可以正常加载它。
我激活了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
但是它输出的是一个空白页面,既没有文字也没有源代码。如果我故意制造一个语法错误,比如在“def”前面加个空格,我就能在网址上看到错误信息:
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
我花了大约五个小时浏览不同的教程、常见问题和故障排除指南,但找不到关于这个具体问题的描述。
你觉得可能是什么问题呢?
编辑:这是该网站的Apache配置...
<Directory />
Options FollowSymLinks
AllowOverride None
AddHandler mod_python .py
PythonHandler mptest
PythonDebug On
</Directory>
编辑 2:哦,还有一件事我忘了提,就是我打算用mod_python来编写Apache扩展。这个应用本身是用PHP写的,但我需要在服务器上做一些安全调整 :)
3 个回答
我为了更清楚地说明,写了一个全新的回答...
我决定安装 mod_wsgi。现在我已经设置好了,当我打开我的测试文件时,只能看到页面的源代码。我还没有花时间去找出问题所在,所以等我解决了这个问题或者觉得需要更多帮助时再来跟你们说 :)
谢谢你们 :)
你最开始遇到的问题是,mod_python.cgihandler正在处理你的请求。这意味着你的Python脚本文件被当作CGI脚本来运行。所以,它不返回任何东西也就不奇怪了。
你可能在Apache的配置中有一些冲突的设置,这导致了mod_python.cgihandler被启用了。
不要使用 mod_python
。
一个常见的错误是把 mod_python
当成是“mod_php
,但是用Python”,但这并不正确。mod_python
更适合用来编写Apache的扩展,而不是用来开发网页应用。
在Python网页应用和网页服务器(不仅仅是Apache)之间使用的标准化协议是WSGI。使用这个协议可以确保你的应用可以发布到任何符合WSGI标准的网页服务器(几乎所有现代网页服务器都符合这个标准)。
在Apache上,应该使用mod_wsgi
。
下面是用WSGI标准和mod_wsgi
在Apache上重写的你的例子:
mywebapp.py
:
def application(environ, start_response):
start_response('200 OK', [('content-type', 'text/plain')])
return ['Hello World']
Apache配置:
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。它们会让事情变得更简单。
一个不错的网站是 wsgi.org