网上很多关于python脚本以fastcgi方式在lighttpd中运行的配置,都是python以独立进程方式手动运行,如:
fastcgi.server = ( "/beylog.fcgi" =>
( "main" =>
(
"host" => "127.0.0.1",
"port" => 3333,
"check-local" => "disable",
)
)
)
( "main" =>
(
"host" => "127.0.0.1",
"port" => 3333,
"check-local" => "disable",
)
)
)
而php的fastcgi方式运行,一般都是由lighttpd自动启动的。如:
fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/tmp/php.socket" )))
那python脚本是否也能像php一样方便呢?最近重新翻出flup中一直搞不明白的代码,发现,python脚本使用flup,也能使用像php一样的配置:
fastcgi.server=(
"/hello/app.fcgi" =>(
"main" => (
"bin-path" => "/usr/bin/python /www/wwwroot/hello/app.fcgi",
"socket" => "/tmp/lighttpd.fcgi.hello.socket",
"check-local" => "disable",
)
),
"main" => (
"bin-path" => "/usr/bin/python /www/wwwroot/hello/app.fcgi",
"socket" => "/tmp/lighttpd.fcgi.hello.socket",
"check-local" => "disable",
)
),
)
如上,bin-path设置启动的命令;socket设置到/tmp目录里面(lighttpd有权创建编辑文件),这个socket只是一个必须的摆设,实际是用过fastcgi标准中定义的FCGI_LISTENSOCK_FILENO来通讯;
app.fcgi脚本中,flup server以参数bindAddress=None方式启动,如果是直接使用flup包,代码:
from flup.server.fcgi import WSGIServer
WSGIServer(AppHandle).run()
WSGIServer(AppHandle).run()
如果是django项目,代码:
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
runfastcgi(method="threaded", daemonize="false")
这样,python脚本也想php脚本一样,由lighttpd fastcgi模块自动启动管理。
----------------------------------------------------------------------------------------
相关帖子: apache2下,部署django应用