Web.py/Chinese

我们为您准备了这个文档来帮助您快速的使用web.py

你可以在windows平台使用putty,UNIX则需要使用SSH. 你的用户需要有使用shell的权限,这个可以在用户控制面板中进行设置 在评论页可以看到更多的信息

目录

1.架设 web.py 1.1 CGI 1.1.1 0. 开始 1.1.2 1. 安装 web.py   1.1.3 2. 安装 Flup 1.1.4 3. 使用 Apache 服务 1.1.5 4. 检查并发现错误 1.2 FCGI 1.2.1 Benchmarking 1.2.2 重启 FASTCGI 1.2.3 改进稳定性和加快启动速度

架设 web.py

CGI 如果您按照我们的步骤来,那么架设CGI将是一件十分容易的事情.在下面的示例代码中,将example.com替换成您自己映射在dreamhost的域名.

0. 开始

进入到您的web主目录. - cd ~/example.com -

1.安装web.py

使用Subversion命令行代码工具来获取最新的web.py - svn co http://webpy.org/svn/trunk/web/ - 按照如下方式来建立一个index.cgi,这将是您的第一个web.py网页 - import web urls = ('/', 'index') class index: def GET(self): print "Hi web.py, finally we meet!" def runfcgi_apache(func): web.wsgi.runfcgi(func, None) if __name__ == "__main__": web.wsgi.runwsgi = runfcgi_apache web.run(urls, globals) - 将该文件上传到web主目录后,使用如下的命令来使该文件可访问 - chmod +x index.cgi -
 * 1) !/usr/bin/env python2.4

2.安装Flup

使用wget命令来获取最新的fcgi - wget http://svn.saddi.com/py-lib/trunk/fcgi.py - 按照如下提示修改web/wsgi.py - --- wsgi.py    (revision 130) +++ wsgi.py    (working copy) @@ -13,8 +13,8 @@ def runfcgi(func, addr=('localhost', 8000)): """Runs a WSGI function as a FastCGI server.""" -   import flup.server.fcgi as flups -   return flups.WSGIServer(func, multiplexed=True, bindAddress=addr).run +   import fcgi as flups +   return flups.WSGIServer(func, multiplexed=False, bindAddress=addr).run - (译者注:使用++的内容替换掉--的内容)

3.使用apache的服务

编辑apache的.htaccess文件来启用cgi - vim .htaccess - 添加如下代码 - Options +ExecCGI AddHandler cgi-script .py  RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.cgi/$1 [L]  -

4.检查并发现错误 现在,你的web主目录应该是这个样子 - $ ls -F ~/example.com fcgi.py index.cgi* web/ - 使用你的浏览器访问http://example.com/(您自己映射在dreamhost的域名),应该就可以看到问候语.如果浏览器显示"500内部错误",那就应该检查下错误日志. - tail -n 30 ~/logs/example.com/http/error.log -

(译者注:上面的内容足够成功运行web.py了,下面的内容我也还没有进行,所以仅供参考)

FCGI 1.使用FastCGI架设您的域名或二级域名.假设您的域名是todo.dabase.com 2.cd; rmdir ~/todo.dabase.com 3.svn co http://svn.natalian.org/projects/todo/ 4.ln -s ~/todo ~/todo.dabase.com 5.Tweak ~/todo with your mysql db (see config.py) and email stuff for errors 并不建议您在shell下进行fcgi的测试开发,因为如果fastcgi的进程开始运行后,停止或重启这个进程都是一件让人头痛的事情.您可以使用web.reloader在本地进行开发,这样,您的任何改变将立即被反应到您的web程序.

Benchmarking

ab is from the apache2-utils Debian package. 从apache2-utils Debian包中找到ab组件 - /usr/sbin/ab -c 4 -n 300 http://todo.dabase.com/ - 4 concurrent connections pushing out 300 requests. If you find it too slow, considering running lighttpd on a dedicated server. 4个并发连接将产生300个请求.如果你发现它运行太慢,请考虑在一台专用服务器上运行lighttpd.

重启FastCGI进程

为了使新的代码起作用,你需要重启fcgi进程. 如下代码将会起作用 - killall python2.4 -

改进稳定性和加快启动速度

1.使用http://svn.saddi.com/py-lib/trunk/fcgi.py来代替较新的flup 2.按照如下方法修改wsgi.py - --- wsgi.py    (revision 130) +++ wsgi.py    (working copy) @@ -13,8 +13,8 @@ def runfcgi(func, addr=('localhost', 8000)): """Runs a WSGI function as a FastCGI server.""" -   import flup.server.fcgi as flups -   return flups.WSGIServer(func, multiplexed=True, bindAddress=addr).run +   import fcgi as flups +   return flups.WSGIServer(func, multiplexed=False, bindAddress=addr).run -

////////////////////////////////////////////////////////////////////////////////////////

前期准备

工欲善其事,必先利其器.要在DreamHost上装个web.py得准备下列工具: 运行shell命令和服务器端交互的软件:这个我是用putty 上传文件用的ftp软件:这个我用cuteftp python脚本编辑软件:这个我用IDLE

如何能操纵服务端 这个可以想象一下远程连接是怎么回事.一般DreamHost的用户会有一个帐号用来远程登陆到服务端,然后就可以进行一些操作.下载需要的文件,安装文件,配置apache服务器,配置mysql服务器等等等等.如果你要问你配置了你的,会不会影响到别人.我想应该是不会影响的.

关于putty putty是DreamHost推荐使用的工具.用来输入命令和服务端交互.稍微小白些的解释,就是你通过putty和服务端连接,然后输入一些命令行,可以操作服务端的文件什么的.类似于在本机用cmd打开的命令行提示符那样的操作. 看这里的介绍: http://wiki.dreamhost.com/Putty 可以在这里下载: http://www.chiark.greenend.org.uk/~sgtatham/putty/ 安装后打开putty,会让你输入服务器地址,这个地址是用户名@主机名,选择ssh登陆,完成后打开,会提示你输入密码.注意这个时候你开始在键盘敲你的密码,但是在putty的界面上并不会显示什么,直到你输入完密码,按回车.如果密码正确,就会出来一个欢迎界面,否则putty就会提示密码错误,要求再次输入.还有一种情况是密码正确了,但是putty自动关闭了.这是因为你的账户还没有使用shell的权限,需要到用户面板开通一下. 然后就是开始输入命令了,一些常用的命令,比如dir显示当前目录,cd进入到某个目录,mkdir新建文件夹,wget远程下载,tar解压缩... 基本明白了吧. 还有,如果要在里面粘贴文本,只要点击一下右键就可以.

关于ftp和关于IDLE 省略了.

开始安装web.py 基本上就是打开这个页面 http://wiki.dreamhost.com/Web.py 照着一步一步的来.

我在这里来个难点解说.

应该在哪个目录下? 是在你的web主目录下

我不用python2.4怎么办? 改成#!/usr/bin/env python2.3 就可以.

怎么修改web.py's web/wsgi.py? 这个其实挺费了一番功夫,一开始没看明白那些加加减减是什么意思,后来明白过来,就是打开wsgi.py这个文件,把runfcgi里面的两句替换一下. import flup.server.fcgi as flups return flups.WSGIServer(func, multiplexed=True, bindAddress=addr).run 替换成 import fcgi as flups return flups.WSGIServer(func, multiplexed=False, bindAddress=addr).run 要注意不要有多余的空格.

怎么使用vim命令修改.htaccess 首先是敲入vim .htaccess 然后复制那一段,贴上去.然后检查下对不对.我复制粘贴的时候经常会把一开始Options的字母"O"给弄丢了,仔细检查下.没问题后,摁键盘上的ESC键,这个时候就进入命令模式,在输入":X",这是保存退出的意思.这就可以了. 如果不放心,可以在使用vim .htaccess命令,这个时候一般会提示文件已经存在,让你选择打开的模式,用只读模式看下有没有问题吧.

关于FCGI和web.py

在DreamHost的web.py是这么运行的: web请求->apache->FCGI->web.py->.cgi程序页. 我不知道对不对,暂且这么理解吧. 但是如果你是和我一样,在用windows,那就会觉得有这样的问题:在本地如何编写程序,然后传到服务端看效果.因为我觉得是在本地在装apache和fcgi会是非常麻烦的事情,不如直接双击.py文件就自动启动一个web server简单啊. 后来我发现其实是可以实现的.我们来对比下web.py的程序和web.py+fcgi的程序,不同的就是最后如何解析文件: web.py:

if __name__=='__main__': web.run(urls,globals)

web.py+fcgi:

def runfcgi_apache(func): web.wsgi.runfcgi(func, None) if __name__ == "__main__": web.wsgi.runwsgi = runfcgi_apache web.run(urls, globals)

所以,我们只管在本地写我们的程序,最后上传到服务端的时候,就把最后的webrun部分改一下就可以. 稍微麻烦了些,但是比较简单快速的办法

其他 另外,我现在还是运行python2.3,我已经装了python2.5,但是还不清楚该怎么调用.需要再研究下.

暂时记得起来的问题就这么多,以后有需要了再补充.