为四川人民祈祷! www.onefoundation.cn
logo of kjam.org

WSGI与Apache,无关

理论上说来,两者应该完全没有关系。WSGI应用程序需要一个WSGIServer,当然这只是一个标准,实际上的实现可能会有很多。当然,如果你连WSGI是什么都完全搞不清楚,建议你先看看PEP333

WSGIClient很容易实现,简单到只需要一个函数就可以搞定,比“hello,java”更加容易的明白
def simple_app(environ, start_response):

status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)
return ['Hello world!\n']

我们这里拿出来玩的WSGIServer是框架CheryPy中的一部分,它可以被剥离出来单独使用,源代码的开头注释部分告诉你怎么实现一个标准的"Hello,WSGI"。这样一个服务器在开发时候做测试是完全没有问题的,但是要放到互联网上被成千上万的流量考验,估计没有人敢这么做。

所以我们得找个坚固的东西,Apache是选择之一,是惯性的选择,虽然不够创新,但是还是很多人这么选择了。但是我们之前就说过了,WSGI和Apache几乎什么关系都没有,一个是Python语言的接口,另外一个是C语言的服务器。

CGI是最通用的做法,任何语言都可以这样做。面对请求,Apache可以把请求转换成一个进程的启动,把参数作为环境变量,把标准输出重定向为网页上的内容。

写一个WSGI2CGI的程序看来可行,但是CGI的效率不高,已经是远近闻名的事情了。

所以为了要支持新的功能,Apache需要写module。

Module是Apache扩展自己的主要手段,module就是一个动态连接库,使用C写成。但是,我们不需要自己写,因为已经有现成的给我们用了,而且还不只一个。他们是mod_python和mod_fcgi,还有mod_scgi

最有名的就是FastCGI,根据传言效率也比mod_python好一些,我自己的网站也跑在FastCGI上。FastCGI的标准也支持众多的语言,WSGI2FCGI的库也有一些现成的可以使用了。

...
其实这不是How to式的文章,我需要阐明的是:

写web程序的时候,坚持WSGI的标准(其实WSGIClient本身很容易),或者采用使用WSGI标准的框架,就可以在部署的时候充分利用现有的很多便利的工具。如果是Java,因为Servlet是私有的标准,所以只能被部署在Java应用服务器上。

WSGI与Apache本身是没有关系的,但是很多人对Apache感情深厚,在学习WSGI的时候总是心系Apache,很好奇这样一个协议是如何与我们现在的web服务器结合起来的。这样反倒不容易理解WSGI标准本身。或许我们应该考虑的是WSGI是怎么与FastCGI/SCGI联系起来的

除了WSGI Client和Server以外,WSGI还有对Middleware的定义,以后再详细讨论
comments: 2900  
by kernel1983

一些调整

这两天的空闲时间做了以下的事情
去掉了FCKeditor,那个玩意儿太难折腾,认输了,直接编辑html是我的强项
css中加入了对于pre的描述,方便大家以后可以看到这个样子:
print 'hello,python!'

折腾.htaccess文件
RewriteEngine On
RewriteBase /
RewriteRule ...
我终于搞明白这些密码了
最后,由于douban现在对于我的blog来说只认识index.html,所以不能被搜索到本人blog上的任何更新。所以继续使用Rewrite抗议。现在无论是http://kjam.org/还是http://kjam.org/index.html都可以访问。接下来我只能求神拜佛希望爬虫可以认识下面的html标记了:
<link rel="alternate" type="application/rss+xml" 
title="PyKJam(RSS 2.0)" href="/rss/blog/" />
comments: 3031  
by kernel1983

I love python

Beylog运行在DH上,FastCGI方式飞快的奔跑,让我感觉良好!就像外面美好的阳光,晴朗的天空,有一阵凉爽的风吹来,那种心情……

对于一个Python的忠实Fans来说,可以使用一套基于Python的weblog app,是一件非常有满足感的事情。Django是一个快速开发的好平台,这种规模的程序千万要DRY(Don't Repeat Yourself),感谢Beyking完成了这么出色的系统。相对于非常LowLevel的Pylons和完善的Zope来说,Django是一个完美的折中点,可以满足大部分的需求。

Django的特性我还要慢慢学习,才能熟练驾驭。出色的设计一直是Python社群区别于其他社群的鲜明标志……当然还有需要我解决的,FCKeditor的上传部分,可能还需要做很多功课。
comments: 577  
by kernel1983
1...21222324252627