前阵子我已经在GAE上申请成功的一个帐号,因此创建了一个 http://ulipad.appspot.com,不过它是我直接使用GAE的SDK开发的,其中改造了web2py的模板。现在Massimo已经声明web2py的最新版本已经可以支持GAE了,并且给出了一个视频。从视频上看,首先是在本地进行开发,然后部署到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搭建的一个例子,只是一个表格模块的测试,可以看一下。


3条评论

  1. 发现一个错误:第1段的“http://ulipad.appsport.com/”应该为“http://ulipad.appspot.com/”。

  2. web2py看起来不错,应该比django更简洁,不知用web2py开发的project多不多,以前没有关注过web2py,还望limodou多介绍

  3. 请教limodou,如果已经有一个数据库(数据量较大)的应用,如何保持数据库及数据不变。而改用web2py来开发其数据库前端的界面及应用逻辑。

发表评论

评论也有版权!