lighttpd下pylons的scgi发布
SCGI协议是CGI协议的替代者,是一种应用程序和HTTP服务器之间通讯接口的标准,类似于
FastCGI协议,但更容易实现。
pylons构建于
paste之上,可以使用pastedeploy启动一个
WSGI服务来运行
pylons应用程序,在后台通过
flup以FastCGI、SCGI、AJP等方式和http服务器(apache或lighttpd)相通讯。
apache和lighttpd的windows下的安装包中都提供了fastcgi模块,不过按照
pylons文档中的说明配置后,一运行就出错,根据trackback信息发现,是因为flup中相关代码使用了一些windows下没有提供的socket函数,程序无法执行。
lighttpd另外提供了scgi模块,尝试后发现flup的多线程模式(thread)的scgi服务可以启动,但是多进程模式(forked)不行,原因和fastcgi类似。下面就讲一下lighttpd下
pylons的scgi发布配置。
首先,你需要安装flup包。
如果你已安装了setuptools工具包,那就可以运行
easy_install -U flup来安装。
然后,修改程序配置文件(就是生成
pylons程序后应用程序目录下的那个development.ini文件)中的设置:
...
[server:main]
use = egg:PasteScript#flup_scgi_thread
host = 0.0.0.0
port = 5000
...
use行指定了启动WSGI服务的方式,默认为egg:Paste#http,我们需要启动scgi服务,所以修改为egg:PasteScript#flup_scgi_thread。
在命令行中运行
paster serve development.ini,就可以和http服务器进行通讯了。
接着应该设置lighttpd了。打开lighttpd.conf,确定模块列表中有mod_scgi,要注意的是该模块应该在mod_rewrite和mod_access之后,但在mod_accesslog之前,然后再添加如下配置:
scgi.server = ( "/" =>
((
"host" => "127.0.0.1",
"port" => 5000,
"check-local" => "disable",
"docroot" => "/"
))
)
一个简单的scgi配置就好了,你可以启动浏览器,键入地址127.0.0.1:5000,是否看到了熟悉的
pylons程序默认页面?
apache下没有现成的scgi模块(在网上找到过一个,但似乎不是for 2.X的,apache2.2下一加载就出错),不过可以在
Python Cheese Shop上找一个scgi包,里面有apache模块的源程序。原以为在windows下编译会很麻烦,不过试了一下,其实很简单:在VC环境中,创建一个dll工程,把scgi源文件添加进去,然后把apache的头文件目录添加到工程配置中,应该就可以顺利编译了。
发表于 @ 2008年07月04日 15:05:40|评论(loading...)|收藏