用户操作
[即时聊天] [发私信] [加为好友]
蒋涛ID:joliny
107277次访问,排名847(-1)好友75人,关注者89
绘画,听音乐,读书,乒乓球,乐器,电脑技术学习。
joliny的文章
原创 68 篇
翻译 0 篇
转载 584 篇
评论 47 篇
蒋涛的公告

个人简介
网名:夜语无声(joliny)
QQ:154238669
Skype:joliny
MSN:jbakwd@hotmail.com

来自:西安

今日天气

最近评论
event:关闭lightwindow打开的页面后要刷新窗口在哪处理?
セックス:セックスセフレ
セックス:[url=http://www.too-lovely.com/tag/gallcore/]セックス[/url][url=http://www.love-is-bet.com/ntnt/girls/]セフレ[/url][url=http://www.all-about-lifeyou.com/]アダルト[/url][url=http://www.loves-lock.net/celebrity……
セックス:セックスセフレアダルトwww.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
文章分类
收藏
    相册
    梦幻天空
    blog
    IBM developerWorks 中国
    相濡以沫
    forum
    java
    Ajax中国
    cgi教程
    IBM中文
    IocBlog
    ItPub
    J2ME开发
    JavaEye
    javascript
    JavaWorld
    MemCached 中文站
    minuteman的BLOG
    redsaga
    smarty
    中国it实验室
    中文JAVA技术网
    开放技术文档查询系统
    数据结构
    最实用的Linux博客
    python
    Django Book
    limodou学习笔记
    PyScripter
    sleepless
    thinkhole.org
    啄木鸟 Pythonic 开源社区
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 Django+SCGI收藏

    新一篇: Light Window v2.0 | 旧一篇: Turbogears+SCGI

    Django+SCGI

    阿舅于2008-04-21 14:25:18发表

    部署了TG,就想着把DJANGO也弄上去。本来是打算用FASTCGI方式的,这个在DJANGO官网上也有教程,但后来又在网上看到了一篇文章,地址如下 http://blog.opensource.org.cn/hdcola/2007/10/django-1.html

    这让我立即考虑换成SCGI,本来我的TG也是跑在SCGI上的,既然DJANGO跑在SCGI上性能如此出色,没有不选择它的道理。 更何况用FASTCGI的话配置静态文件的目录必须用REWRITE,ALIAS是无效的 好,启用人肉搜索引擎,终于在一个老外的博客上找到了一篇配置方法, 首先是下载flup和scgi easy_install flup easy_install scgi 新建文件django-scgi.py, 脚本如下: import os import sys

    if os.name == 'posix':

        def become_daemon(ourHomeDir='.',outLog='/dev/null',errLog='/dev/null'):         """         Robustly turn us into a UNIX daemon, running in ourHomeDir.         Modelled after the original code of this module and some         sample code from the net.         """

            # first fork         try:             if os.fork() > 0:                 sys.exit(0)     # kill off parent         except OSError, e:             sys.stderr.write("fork #1 failed: (%d) %s" % (e.errno, e.strerror))             sys.exit(1)         os.setsid()         os.chdir(ourHomeDir)         os.umask(0)         # second fork         try:             if os.fork() > 0:                 sys.exit(0)         except OSError, e:             sys.stderr.write("fork #2 failed: (%d) %s" % (e.errno, e.strerror))             sys.exit(1)

            si = open('/dev/null', 'r')         so = open(outLog, 'a+', 0)         se = open(errLog, 'a+', 0)         os.dup2(si.fileno(), sys.stdin.fileno())         os.dup2(so.fileno(), sys.stdout.fileno())         os.dup2(se.fileno(), sys.stderr.fileno())

    else:

        def become_daemon(ourHomeDir='.',outLog=None,errLog=None):         """         If we are not running under a POSIX system, just simulate         the daemon mode by doing redirections and directory changeing         """

            os.chdir(ourHomeDir)         os.umask(0)         sys.stdin.close()         sys.stdout.close()         sys.stderr.close()         if errLog and outLog:             sys.stderr=open (errLog, 'a', 0)             sys.stdout=open (outLog, 'a', 0)         elif errLog:             sys.stderr=open (errLog, 'a', 0)             sys.stdout=NullDevice ()         elif outLog:             sys.stdout=open (outLog, 'a', 0)             sys.stderr=NullDevice ()         else:             sys.stdout = NullDevice()             sys.stderr = NullDevice()

        class NullDevice:         """         A substitute for stdout and stderr that writes to nowhere.         This is a substitute for /dev/null         """             def write(self, s):             pass

    def main():     from flup.server.scgi_fork import WSGIServer     from django.core.handlers.wsgi import WSGIHandler

        import getopt

        (opts, args) = getopt.getopt(sys.argv[1:], 'f:s:h:p:',         ['settings=','socket=','host=','port=',          'minspare=', 'maxspare=', 'maxchildren=',          'daemon', 'etclog=', 'errorlog=', 'workdir=',          'projects='])         socket = None     host = None     port = None

        minspare = 1     maxspare = 5     maxchildren = 50

        daemon = None     workdir = '.'     etclog = '/dev/null'     errorlog = '/dev/null'

        projects = []

        for (o, v) in opts:         if o in ('-s', '--socket'):             socket = v         elif o in ('-h', '--host'):             host = v         elif o in ('-p', '--port'):             port = int(v)         elif o in ('-f', '--settings'):             os.environ['DJANGO_SETTINGS_MODULE'] = v         elif o in ('--minspare',):             minspare = int(v)         elif o in ('--maxspare',):             maxspare = int(v)         elif o in ('--maxchildren',):             maxchildren = int(v)         elif o in ('--daemon',):             daemon = 1         elif o in ('--errorlog',):             errorlog = v         elif o in ('--etclog',):             etclog = v         elif o in ('--workdir',):             workdir = v         elif o in ('--projects',):             projects.append(v)         # add projects to path     for p in projects:         if p not in sys.path:             sys.path.insert(0, p)

        # if we should run as a daemon, use the above function to turn us     # into one reliably. This should correctly detach from the tty.     if daemon:         become_daemon(ourHomeDir=workdir,             outLog=etclog, errLog=errorlog)

        if socket and not host and not port:         WSGIServer(WSGIHandler(), minSpare=minspare, maxSpare=maxspare, maxChildren=maxchildren, bindAddress=socket).run()     elif not socket and host and port:         WSGIServer(WSGIHandler(), minSpare=minspare, maxSpare=maxspare, maxChildren=maxchildren, bindAddress=(host, port)).run()     else:         print "usage: django-scgi.py [--settings=<settingsmodule>] --socket=<socketname>"         print "   or: django-scgi.py [--settings=<settingsmodule>] --host==<hostname> --port=<portnumber>"         print         print "   additional options are:"         print "      --minspare=<minimum number of spare processes, default 1>"         print "      --maxspare=<maximum number of spare processes, default 5>"         print "      --maxchildren=<maximum number of child processes, default 50>"         print         print "      --daemon"         print "      --etclog=<path for stdout log, default /dev/null>"         print "      --errorlog=<path for stderr log, default /dev/null>"         print "      --workdir=<path for working directory, default .>"         print         print "      --projects=<path to add to sys.path>"

    if __name__ == '__main__':

        # first patch our own version of socketpair into the sockets module     # if we don't have it already (comes with Python 2.4)

        import socket     if not hasattr(socket, 'socketpair'):         import eunuchs.socketpair

            def socketpair():             (p,c) = eunuchs.socketpair.socketpair()             (pp,cc) = (socket.fromfd(p,1,1), socket.fromfd(c,1,1))             os.close(c)             os.close(p)             return (pp,cc)

            socket.socketpair = socketpair

        main()

     

    OK,将此文件COPY至DJANGO工程文件的上一级路径(和文件夹同一级),然后运行命令 python django-scgi.py --projects=/home/usr/djapp/ --settings=settings --host=localhost --port=8000 wsgi启动了,接下来配置lighttpd scgi.server = ("/" =>                     ("127.0.0.1" =>                          ("host" => "127.0.0.1",                          "port" => 8000,                          "check-local" => "disable")                     )                 )

    } 重启lighttpd,OK

     

    另外要注意,我用的DJANGO就是目前官网上的0.96版,但其中的wsgi.py(CORE/HANDLERS下)文件是要修改一下的,至少我下载的这个是需要的,官网还没及时补丁 #self.path = environ['PATH_INFO'] #注释掉第77句,然后改成 self.path = force_unicode(environ['SCRIPT_NAME'] + environ['PATH_INFO']) 另外在utils文件夹下还缺少两个文件,分别是encoding.py和safestring.py 去官网上下载 当然,这是我的安装情况,也许你下载的DJANGO不需要这样做

    发表于 @ 2008年06月29日 17:40:53|评论(loading...)|收藏

    新一篇: Light Window v2.0 | 旧一篇: Turbogears+SCGI

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 蒋涛