用户工具

站点工具


framework:web2py:gae-limodou

web2py in GAE

现在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搭建的一个例子,只是一个表格模块的测试,可以看一下。

参考

framework/web2py/gae-limodou.txt · 最后更改: 2011/02/11 03:30 (外部编辑)