0

我正在尝试在 mac osx 上的默认 apache 服务器中安装 mod_wsgi 模块。我正在关注这个人的教程。我已经到了将模块添加到 apache 配置的部分,我插入了这两行:

$ sudo nano /private/etc/apache2/httpd.conf
...
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
WSGIScriptAlias / /Library/WebServer/Documents/
...

回到终端我输入:

sudo /usr/sbin/apachectl restart

当我在浏览器中访问 localhost/testpy.py 时,我收到一条错误消息,提示无法连接到本地主机。这是我的testpy.py文件:

def application(environ, start_response):
status = ’200 OK’
output = ‘Hello World!’

response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)

return [output]

编辑

当我添加了这两行代码时,apache 错误日志不会产生任何内容。当我将它们取出并转到一个我知道在错误日志中得到它之前有效的 URL 时:

caught SIGTERM, shutting down
Init: Session Cache is not configured [hint: SSLSessionCache]
httpd: Could not reliably determine the server's fully qualified domain name, using my-machine.local for ServerName
Digest: generating secret for digest authentication ...
Digest: done
Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r configured -- resuming normal operations
4

2 回答 2

0

请注意,将 WSGIScriptAlias 设置为与 DocumentRoot 相同的目录是一个坏主意。

实际问题可能是您应该拥有:

WSGIScriptAlias / /Library/WebServer/Documents

也就是说,从目录路径中删除尾部斜杠。

您或许还应该阅读官方 mod_wsgi 文档:

将目标设为 WSGI 脚本文件的目录不一定是最合适的做法,因此请查看文档以了解其他选项。

使用一些任意的人的博客文章几乎永远不能很好地替代官方文档。

于 2013-05-16T00:30:11.607 回答
0

不幸的是,您遵循的教程没有帮助。WSGI 并不是一种在浏览 Python 文件时只运行它们的方法:您已经可以直接使用 CGI 来做到这一点。使用 WSGI 的常规方法是创建一个应用程序,通过运行 wsgi 文件为特定前缀(可能为空)下的所有 URL 提供服务。

所以,你有三个问题。首先,您的 WSGIScriptAlias 需要指向一个实际文件,在本例中是您的testpy.py文件:

WSGIScriptAlias / /Library/WebServer/Documents/testpy.py

其次,该文件需要是有效的 Python:也就是说,它需要正确缩进,因为缩进在 Python 中很重要。

第三,由于别名指向/,那是你应该去的 URL。

于 2013-05-15T20:04:06.373 回答