Mod_python不产生输出

时间:2009-10-02 08:51:44

标签: python apache mod-python

在使用Python 2.4.3的CentOS 5(Apache 2.2.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

它输出一个空白页面,没有文字,也没有来源。如果我有意识地创建语法错误,我会在URL上获得错误输出,例如(当我在“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

我花了大约五个小时浏览不同的教程,常见问题解答和故障排除指南,但无法找到这个exakt问题的描述。

您认为问题/原因是什么?

编辑:以下是该网站的Apache配置...

<Directory />
    Options FollowSymLinks
    AllowOverride None

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

编辑2:啊,我忘了提到的另一件事是我打算用mod_python编写Apache扩展。应用程序本身是用PHP编写的,但我需要在服务器上做一些安全性调整:)

3 个答案:

答案 0 :(得分:2)

请勿使用mod_python

一个常见的错误是将mod_python作为“ mod_php,但对于python ”并且不正确mod_python更适合编写apache扩展,而不是Web应用程序。

python Web应用程序和Web服务器(不仅仅是apache)之间使用的standartized协议是WSGI。使用它可确保您可以将应用程序发布到任何符合wsgi标准的Web服务器(几乎所有现代Web服务器都符合wsgi)

在apache上,请改用mod_wsgi

您的示例使用wsgi标准和apache上的mod_wsgi重写:

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)都将由此脚本处理。

选择Web框架是个好主意。 CherryPyPylonsDjango。他们让事情变得更加容易。

要查看的好网站是wsgi.org

答案 1 :(得分:1)

您最初的问题是调用mod_python.cgihandler来处理请求。这意味着您的Python脚本文件被解释为CGI脚本。因此,难怪它不会返回任何东西。

您的Apache配置中可能存在冲突的定义,即启用mod_python.cgihandler。

答案 2 :(得分:0)

为了清晰起见,我提出了一个全新的答案......

我决定安装mod_wsgi。所以我已经设置好了,当我转到我的测试文件时,我只看到页面源代码。我还没有花时间去寻找问题,所以当我解决问题或决定需要更多帮助时,我会回复你。)

谢谢:)