1

刚刚使用 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 编写的,但我需要在服务器上进行一些安全性 tweeks :)

4

3 回答 3

2

不要使用mod_python.

一个常见的错误是把mod_pythonas " mod_php, but for python " 这不是真的mod_python更适合编写 apache 扩展,而不是 Web 应用程序。

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

在 apache 上,请mod_wsgi改用。

您的示例使用 wsgi 标准和mod_wsgiapache 重写:

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)下的任何访问都将由此脚本处理。

选择 Web 框架是个好主意。樱桃派塔架姜戈。他们让事情变得更容易。

一个不错的网站是wsgi.org

于 2009-10-02T10:18:17.000 回答
1

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

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

于 2009-10-02T23:08:41.717 回答
0

为了清楚起见,我做了一个全新的答案......

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

谢谢 :)

于 2009-10-02T11:35:19.550 回答