====== web2py in GAE ====== 现在Massimo已经声明web2py的最新版本已经可以支持GAE了,并且给出了一个[[http://www.vimeo.com/932708|视频(需要翻墙)]]。从视频上看,首先是在本地进行开发,然后部署到GAE上去。下面是我的一个实践的记录。 1. 先从svn中同步成最新的版本。如果你仔细观察,你会看到有app.yaml和cgihandler.py,它们将用来处理wsgi的请求。如果你打开app.yaml,可以看到: application: web2py version: 1 api_version: 1 runtime: Python handlers: - url: .* script: cgihandler.py 很明显,所以有处理都交给cgihandler.py了。因为web2py可以处理静态文件,因此也不需要对静态文件单独配置。 2. 在本地的GAE环境下创建一个开发目录,我起名为web2try。这个开发目录要看你的安装路径的,我是在windows下进行的,路径为C:\Program Files\Google\google_appengine。 3. 将web2py目录下的所有东西导出。我是使用svn的export命令。这样,只保留有用的源码,象.svn之类的东西就没有了。然后再将导出的内容拷贝到web2try目录下。这样看上去基本上就是: applications/ __init__.py gluon/ app.yaml cgihandler.py web2py.py 是不是与你的有些不同,没关系,是因为我把认为无用的东西删除了。使用全部的内容,你是可以在本地GAE环境下进行开发的,但是上传时会发现文件非常多。因此我的做法是在另外的目录下进行开发,GAE中只保留上传的内容。在applications下,现在是空的,在我开发好app之后会拷贝过来。 web2py在这一点还是好的,每个app是独立的。admin我没有保留,因为在GAE上不能进行写文件操作,所以你无法直接在GAE中使用admin 进行开发,所以不要了。examples也不要了,太大了。经过精简后,文件数控制在80左右。 4. 本地开发。这块就不多做介绍了。只强调几点: a)注意controller中: response.session_id=None # comment if you want to store sessions 这句话很重要。因为GAE不能写文件,所以这样的话就可以暂时不使用session了。但如果你要写,可能目前还存在问题。 b)如果你需要使用数据库,可以: from gluon.contrib import gql db=gql.SQLDB() 其它的基本上就没有什么区别的。不过我还没有试过,所以也不清楚是否存在问题。而且GAE的数据库不是真正的关系数据库,所以有些功能没有,比如查询时没有不等于,like等。而且它还有一些其它的扩展,如Expando模型,可以动态设置属性,还有一些非关系数据的字段类型,如 ListProperty等。所以数据库这块要仔细一些。 5. 在本地开发完毕后,将app拷贝到applications目录下。 6. 上传。上传之前请注意检查你的app.yaml中的application名字与你在GAE中创建的app的名字要相同。 不过因为我是在windows下开发,所以遇到了一个问题是关于回车符的。这个问题在邮件列表中得到了解决。 上面就是我的记录,测试的功能还很不完整,可能需要随着使用再慢慢发现。 http://web2try.appspot.com/Form/default/index 是我使用web2py搭建的一个例子,只是一个表格模块的测试,可以看一下。 ===== 参考 ===== * http://blog.donews.com/limodou/archive/2008/05/08/1287684.aspx