lighttpd, web.py, spawning fcgi failed

lighttpd, web.py, spawning fcgi failed

基于web.py的程序开发起来还是非常简单的,但是我没想到在服务器上部署的时候却遇到了不少麻烦。我用的 web server 是 lighttpd,不能正常启动,查看错误日志,发现如下几行:

2009-12-15 19:48:04: (server.c.1503) server stopped by UID = 0 PID = 25128 2009-12-15 19:48:30: (log.c.166) server started
2009-12-15 19:48:30: (mod_fastcgi.c.1104) the fastcgi-backend /var/www/code.py failed to start:
2009-12-15 19:48:30: (mod_fastcgi.c.1108) child exited with status 1 /var/www/code.py
2009-12-15 19:48:30: (mod_fastcgi.c.1111) If you‘re trying to run your app as a FastCGI backend, make sure you‘re using the FastCGI-enabled version.If this is PHP on Gentoo, add ‘fastcgi‘ to the USE flags.
2009-12-15 19:48:30: (mod_fastcgi.c.1399) [ERROR]: spawning fcgi failed. 2009-12-15 19:48:30: (server.c.931) Configuration of plugins failed. Going down.

经历了许多周折之后,问题终于解决掉──实际上不是仅仅一个问题。在这儿把经验分享一下,如果有人遇到同样的问题,至少可以少走一些弯路。请按照一下几点检查错误:

code.py 可以执行吗?

当然你可能没有用 code.py 这个名字,我给可执行文件的名字是 root.py

检查一下文件的权限,code.py 必须是可执行的。如果没有执行权限,那么给它加上:

# chmod 755 code.py

同时,要保证文件头部有这样的指令:

#!/usr/bin/env python

hello world 的例子可以正常运行吗?

把你的 code.py 的内容用 web.py 首页的例子替换(别忘了加上第一行的指令):

#!/usr/bin/env python
import web

urls = (
    ‘/(.*)‘, ‘hello‘
)
app = web.application(urls, globals())

class hello:
    def GET(self, name):
        if not name:
            name = ‘world‘
        return ‘Hello, ‘ + name + ‘!‘

if __name__ == "__main__":
    app.run()

一般情况下这个例子是可以正常运行的。这说明可能是我们自己的程序比 hello world 多引用的库出了问题。

检查一下 egg cache 的权限

我的程序要链接 MySQL 数据库,所以用到了 MySQL-python,启动失败肯定有它的份。现在试试在 hello world 里加上 import MySQLdb,果然不能启动了!为了看到原因,我们用 try-except 来捕获 import MySQLdb 引发的异常,并且把它输出到网页上。把上面 hello 类的 GET 函数改成:

try:
    import MySQLdb
except Exception, e:
    return str(e);
return ‘hello‘

打开 localhost:8080, 我看到了如下的错误信息:

Can’t extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: ‘/sbin/.python-eggs’ The Python egg cache directory is currently set to: /sbin/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory.

又是权限问题,解决办法有很多种,我就把它的 owner 改成了运行 lighttpd 的用户(我配置文件里写的是 daemon):

chown -R daemon.daemon /sbin/.python-eggs

lighttpd 使用的是哪个 python?

lighttpd 执行环境的环境变量可能和你在 shell 里使用的是不一样的!我有两个 python,一个是 CentOS 自带的老旧 python 2.4,另一个是我后来自己编译的 python 2.6,在我的 $PATH 里,python 2.6 所在的目录是优先的,但是后来发现 lighttpd 使用的竟然是旧的 python 2.4!如果是这样,比较简单的办法就是在 code.py 的头部写上 python 2.6 的完整路径,比如我的:

#!/usr/local/bin/python
时间: 2024-12-09 07:28:53

lighttpd, web.py, spawning fcgi failed的相关文章

WSGI、flup、fastcgi、web.py的关系

WSGI.flup.fastcgi.web.py的关系 Apache/lighttpd: 相当于一个request proxy,根据配置,把不同的请求转发给不同的server处理,例如静态的文件请求自己处理,这个时候它就像一个web server,对于fastcgi/python这样的请求转发给flup这样的Server/Gateway进行处理 flup: 一个用python写的web server,也就是cgi中所谓的Server/Gateway,它负责接受apache/lighttpd转发的

使用web.py 搭建服务器

有很多python的web框架,web.py是一个轻量级Python web框架.她并不是使用很多的一个. 但并不妨碍她的简单实用.搭建一个嵌入式web服务器最好不过. 下面把笔者搭建过程做一个介绍: 1. 下载python 2.7.8 ,做交叉编译,需要依据自己的平台做修改: ./configure make python Parser/pgen mv python python_for_build;mv Parser/pgen Parser/pgen_for_build make distc

apache 部署web.py

一.安装Mod_wsgi 1.先yum -y install httpd-devel,否则会提示没有apxs 2.如果在make时 wsgi报错apxs:Error: Command failed with rc=65536,那要在configure时加上--with-python=xxxx这个参数 3.解压Mod_wsgi 如果自定义升级过了python到2.7 #./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/p

Nginx+uwsgi+web.py配置

遇坑的同鞋可以留意一下 操作系统:Centos7 准备文件:Python-2.7.13.tgz下载地址:https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgznginx-1.12.0.tar.gz下载地址:http://nginx.org/download/nginx-1.12.0.tar.gzuwsgi-2.0.15.tar.gz下载地址:https://projects.unbit.it/downloads/uwsgi-2.0.1

web.py 学习(-)Rocket web框架

Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: method - A string value indicating the type of Worker to use to answer the requests received by Rocket. The default is wsgi and will invoke the WSGIWorker

web.py session

web.py session学习: import webfrom web import form urls = ( '/','Index', '/test','Test', '/login','Login', '/logout','Logout',) render = web.template.render(".") allowed = ( ('admin','123123'),) web.config.debug = Falseapp = web.application(urls,

每天一点python:web.py框架入门

在使用微信搭建公众平台的时候,使用的是web.py这个方便简单的框架,学习一下. 框架文档:http://webpy.org/docs/0.3/tutorial.zh-cn  按照文档的内容写一遍程序入门就没什么问题了 运行程序:cmd中--进入文件所在路径--输入 python 文件名即可运行 遇到的问题: 问题1.模板文件中,第一行必须以 $def with()开头,否则会报错 $def with (name) $if name: I just wanted to say <em>hell

web.py简易示例

code.py import web urls = ( '/', 'index' ) class index: def GET(self): return "Hello, world,caixianfeng write for the first web.py!" if __name__ == "__main__": app = web.application(urls, globals()) app.run() --------------------------

web.py处理文件上传

1 #coding=utf8 2 import web 3 4 urls = ('/','Home', 5 '/upload', 'Upload') 6 7 app = web.application(urls, globals()) 8 9 class Upload: 10 def GET(self): 11 web.header("Content-Type","text/html; charset=utf-8") 12 return ""&q