5

我正在尝试在 Apache 上使用 FastCGI(实际上是 fcgid)配置 Python 迷你框架 CherryPy。我在共享主机上,所以我无法访问 httpd.conf,只能访问 htaccess。我按照这些教程无济于事:

我不断收到 500 个错误,Apache 日志显示“脚本头过早结束”。我已经尝试了一切(权限/shebangs/full-paths/deamonized/not-daimonized)。我知道 Apache 正在正确执行我的 .fcgi,因为我能够从 python 打印到错误日志,但仅此而已。以前有没有人在共享主机上成功安装过 CherryPy 或任何其他框架?您的帮助将不胜感激。谢谢。

4

4 回答 4

1

Apache + Bluehost + fastcgi + cherrypy + wsgi 不幸的是很多部分。我希望我有一年的时间来为您编写权威指南,但是,唉。您可能会从导致您发布的那些链接的相当长的邮件列表线程中获得一些见解。

于 2009-11-03T15:40:24.533 回答
1

一个想法:确保您的 .fcgi 文件在初始行中引用了正确的 python 可执行文件:

#!/usr/bin/python

我必须让 Django 在 Bluehost 和 apache 上使用错误的 python 环境运行 fcgi 是我的问题(从 shell 工作,但不是从 web/apache 工作)。

除此之外,如果您可以从您的代码打印到错误日志,您能否在访问网页时确认您的代码已正确执行,没有任何异常?(不是从外壳运行时)。

于 2009-11-04T10:13:59.053 回答
1

Bluehost 文章一直是最好的资源,但我没有仔细阅读有关获取最新补丁的部分(第 3 步的开头)。在撰写本文时,甚至现在使用 CherryPy 版本 3.1.2,您都无法执行“动态模式”fcgi(当 apache 产生进程时)。更多在这里。如果您在共享主机上,动态模式基本上是必不可少的。

我已经检查了树干(3.2.0rc1),在跳过了一些箍之后,让它工作了。我按照 bluehost 文章中的第 5 步方法 C。这是我的cherryd.fcgi 的主要内容:

if __name__ == '__main__':
    cherrypy.config.update({
        'server.socket_port': None,
        'server.socket_host': None,
        'server.socket_file': None
    })
    start( daemonize=False, fastcgi=True, imports=["hello"])

此外,在cherrypy/process/servers.py 中,我必须更改以下行:

# from this
# if not hasattr(socket.socket, 'fromfd'):

# to this
if not hasattr(socket, 'fromfd'):

所以,让它工作是可能的,但感觉有点hacky。您应该等待 3.2.0 版的最终发布,或者按照我的做法检查Web.py。我能够很容易地让它与我的共享主机一起工作(文档很好地解释了 fastcgi/htaccess)。

于 2009-11-12T05:56:51.577 回答
0

在您的网络服务器的日志文件中,它实际上应该显示输出是什么让它感到困惑。您确定要查看错误日志和访问日志吗?

于 2009-11-09T02:25:21.117 回答