我正在尝试让 mod-python 与 apache2 一起使用,但没有成功。我已经遵循了一些让 mod-python 工作的教程,但我看不出我做错了什么。
当我访问http://site.example.com/cgi-bin/test.py时我真的得到了我的 404 页面! (如果文件确实不存在,我会收到 403 禁止)
这是我的设置:
在/etc/apache2/sites-enabled/中有以我的每个域命名的配置文件。在 the site.example.com file我已将其添加到用户指令部分:
# Begin user directives <--
<Directory /home/default/site.example.com/user/htdocs/cgi-bin/>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
</Directory>
# --> End user directives
完整文件here ,其中包括行:
编辑以添加 test.py 的内容:
#!/usr/bin/python
print "Content-type: text/html"
print
print 'hello world'
#print 1/0
如上所示,我收到404/python/test.py was not found on this server
。
但是如果我取消注释最后一行,我会得到:
Mod_python error: "PythonHandler mod_python.publisher"
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/publisher.py", line 98, in handler
path=[path])
File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 457, in import_module
module = imp.load_module(mname, f, p, d)
File "/home/default/site.example.co.uk/user/htdocs/python/test.py", line 5, in ?
print 1/0
ZeroDivisionError: integer division or modulo by zero
这个回溯看起来正确吗?顺便说一句,启用 cgitb 没有任何效果。
我可以添加任何其他信息来帮助诊断此问题吗?
最佳答案
据我所知,Publisher 处理程序需要接受请求对象和方法才能返回响应。
在我的脚本中,我有这样的内容:
#!/usr/bin/python
def run(req):
return 'Hello world!'
然后,转到http://.../python/test.py/run
在本例中,req 是发布者处理程序传入的请求对象。
而且,如果您还没有,则需要在 test.py 所在的同一目录中拥有一个 __init__.py
文件。
此外,对于发布者,我注意到有时响应会被缓存。我将在浏览器中看到我已经修复的相同错误。因此,如果您看到一个您认为已经修复的错误,重新启动 apache 并不是一个坏主意。
关于apache2 - mod_python 与 apache2,(重新)导入模块错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/705992/