使用Python和Flup在FCGI和CGI之间切换
我现在正在把所有的Python CGI脚本转换成WSGI标准,使用Flup这个工具(可以在这里找到)。我创建了一个dispatch.fcgi文件,按照文档的说明调用和使用Flup:
from flup.server.fcgi import WSGIServer
...
这个方法运行得很好,但问题出现在我想切换回CGI模式来调试一些东西时。我希望能在不杀掉进程或修改文件的情况下进行调试,这本应该很简单,只需要把Flup服务器替换成:
from flup.server.cgi import WSGIServer
...
但是这样一来,浏览器就给我返回了500错误。我通过SSH检查了头信息和HTML,似乎一切正常。然后我意识到可能是服务器配置有问题(我用的是Dreamhost的共享主机),发现服务器无法执行带有.fcgi扩展名的Python脚本。因此,我找到了一种解决方法,把这个内容添加到.htaccess文件中:
AddHandler cgi-script .fcgi
这样CGI模式几乎可以工作(wsgi.input总是为空,即使我正确读取并传递了长度),但FCGI缓存完全不工作,导致启动了很多进程。现在我完全陷入了僵局,我只想要一个简单的方法来在FCGI和CGI之间切换,这种方法有效吗?还是我漏掉了什么?
非常感谢。
1 个回答
1
FCGI协议和CGI协议是不同的。这就是为什么简单地把FCGI改成CGI不管用的原因。而且,当你把Apache的.fcgi文件处理器改成CGI处理器时,FCGI也不会正常工作。