无法递归的五点半

for_each(day.begin(),day.end(),bind2nd(Add(),me))

导航

<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

相册

收藏夹

C++

Unix/Linux

个人主页

其他

软件工程

网络管理

综合

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

Quixote笔记

又是Python。呵呵。谁叫人家帅呢

Quixote的部署

    在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配合使用。
    Quixote与Apache配合使用方式如下:
  1. 使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请求都会创建一个新的进程。
  2. 使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们正在寻找使用fastCGI的部署经验。
  3. 使用mod_python,将python代码嵌入到Apache中。
  4. 使用SCGI,这是作者推荐的。使用Apache SCGI module scgi_mod将遵循SCGI协议Apache将请求发送到相应的Socket如localhost:3001。而这个Socket由本地运行的一个 Python程序打开。这个Python程序将处理请求,并返回结果。

SCGI的配置

    Quixote的网站上对SCGI的描述:SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。它有些像FastCGI但他的设计更容易实现。

    配置SCGI过程如下:
  • 安装各个模块不在话下,debian让程序员有了懒惰的美德:
      #aptitude install libapache2-mod-scgi python-scgi python-quixote

  • Apache的配置,添加配置到apache.conf。(有些教程中加入了SetHandler scgi-handler ,但这个加上就很本不会和3000通信。可能是版本的问题。最好不用。)
      <Location "/qx">
           SCGIServer localost:3000
           SCGIHandler On
      </Location> 

  • 重启Apache
    配置完成。SCGI的好处在于,修改了Python程序,不用重启Apache,只要重启SCGI就可以了。

第一个Quixote程序

    一切就绪,我们来一次Quixote的完整之旅。

  • scgi程序要求有一个服务打开3000端口。启动scgi的程序如下:
 1 
 2 #!/usr/bin/python
 3 # -*- coding: utf-8 -*-
 4 
 5 from scgi.quixote_handler import QuixoteHandler, main
 6 from quixote import enable_ptl
 7 from quixote.publish import Publisher
 8 enable_ptl() #启动PTL
 9 
10 def create_publisher():
11     from ourroot import RootDirectory
12     return Publisher(RootDirectory(), display_exceptions='plain')
13 
14 if __name__ == '__main__':
15     from quixote.server import scgi_server
16     scgi_server.run(create_publisher, port=3000, script_name="/qx")
17 

  • 程序结构是比较简单的,使用的是scgi_server的run方法。要注意的是run方法中的script_name和前面apache 的配置Location是一样的。程序的关键是导入了ourroot这样一个ptl 。下面是我们的第一个ptl程序。
 1 
 2 # -*- coding: utf-8 -*-
 3 """这个是我们第一个例子的根目录
 4 """
 5 from quixote.directory import Directory
 6 
 7 class RootDirectory(Directory):
 8     _q_exports = [""]
 9     def _q_index [html] (self):
10         print "debug message from the index page"
11         """
12         <html>
13         <head>
14         <meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
15         <title>第一个例子</title>
16         </head>
17         <body>
18         <h1>第一个例子有中文!</h1>
19         </body>
20         </html>
21         """
22 

  • 现在在浏览器中输入http://localhost/qx就可以看到结果了。
  • 除了运行上面的python脚本,也可以采用这样的方式运行scgi:
  • python /var/lib/python-support/python2.5/quixote/server/scgi_server.py \
        --factory
    =FirstApp.create_publisher \
        --script-name
    =/qx  --port=3000


Quixote 中文化的要点

    Quixote的中文设置好像很麻烦。其实随着python、Quixote版本的推进,现在这个问题已经很简单了。字符集使用的是utf-8。使用gb2312可能也是可以的。

  1. 所有源代码使用utf-8在程序的开始加上# -*- coding: utf-8 -*-
  2. ptl的html模板加上content="text/html charset=UTF-8"
  3. 关键:在quixote的安装路径下有__init__.py,将其中的DEFAULT_CHARSET = 'iso-8859-1'改成 'utf-8'
  4. 也可以不修改__init__.py,使用Publisher的时候把Publisher扩展一下:
1 class UTF8Publisher(Publisher):
2     quixote.DEFAULT_CHARSET = "utf-8"

posted on 2008-04-19 15:11 五点半 阅读(6232) 评论(15)  编辑 收藏 引用 所属分类: Python

评论

# re: Quixote笔记 2008-04-21 11:04 你猜

哈哈哈,你肯定不知道我是谁.  回复  更多评论   

# re: Quixote笔记 2009-07-09 09:47 你再猜

哈哈哈哈,你肯定更不知道我是谁.  回复  更多评论   

# re: Quixote笔记 2010-01-06 23:41 你再再猜

哈哈哈哈哈,你肯定更更不知道我是谁.  回复  更多评论   

# re: Quixote笔记 2010-01-29 17:08 爱猜不猜

哈哈哈哈哈哈,你肯定加很肯定加超级肯定我想知道你是谁?  回复  更多评论   

# re: Quixote笔记 2010-04-25 13:32 不猜拉倒

哈哈哈哈哈哈哈哈哈哈哈哈,你肯定肯定加很肯定加超级肯定加超超级肯定我想知道你是谁?  回复  更多评论   

# re: Quixote笔记 2010-11-17 11:27 拉到再猜

哈哈哈,猜了两年半了你也没猜出我是谁  回复  更多评论   

# re: Quixote笔记 2010-12-29 20:18 猜你妈的B

哈哈哈哈哈哈哈哈哈,我猜到你他妈是谁了  回复  更多评论   

# re: Quixote笔记 2011-04-25 16:16 我猜我猜我猜猜猜

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,四年了,还不知道我是谁吧~  回复  更多评论   

# re: Quixote笔记 2011-07-04 12:47 我继续猜猜

也肯定不知道我是谁  回复  更多评论   

# re: Quixote笔记 2011-08-03 13:11 猜你ba的gun

再猜,嘣了你  回复  更多评论   

# re: Quixote笔记 2011-08-26 16:32 还猜?

在怎么猜都猜不出我是谁  回复  更多评论   

# re: Quixote笔记 2012-01-21 19:40 谁再猜!?

再猜!?  回复  更多评论   

# re: Quixote笔记 2013-03-28 00:17 黄先生

路过的黄先生表示这是他长那么大以来见过最无聊的事儿.......  回复  更多评论   

# re: Quixote笔记 2013-07-11 17:36 尼玛,好有爱

rt  回复  更多评论   

# re: Quixote笔记 2013-11-12 17:04 继续猜?

居然能看到这么有爱的评论  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理