前段时间装了ubuntu后,一直想在上面弄个网站玩玩,可是他娘的怎么配mod_wsgi都跑不起来,怒了不想搞了,打算就在公司
搞组内的架在debian下的页面算了。可是回到家确实寂寞。昨天镍总给了个ip我(203.208.46.181),可以访问被墙了好久的appspot,我上去看到自己
两年前写的GAE后,泪流满面,于是决定继续搞GAE。由于自己搞的东西有涉及公司机密的,所以不打算传到google服务器上,就用
GAE launcher在本地倒腾,倒腾好了回公司后可以直接移植到debian上。反正GAE也支持web.py不上么。
说起在GAE上搞web.py,有些东西得记下来防止以后忘掉了。
1、首先得把web.py的安装目录复制到你GAE项目的目录下。其实你要用的所有第三方模块也要丢到你的项目目录下,否则import不了。
2、其次就是要注意你要跑的主脚本的一些写法的问题了。这很恶心,在不同平台下,不同版本下,都有不同的写法。在GAE上其实挺简单,
我贴个例子上来:
1 import web
2
3 render = web.template.render('app.views/')
4
5 urls = ('/','index'
6 )
7
8 session = web.session.Session(app, web.session.DiskStore('sessions'),initializer={'login': 0,'username':'','privilege':0})
9 def session_hook():
10 web.ctx.session = session
11
12 web.internalerror = web.debugerror
13
14 app = web.application(urls, globals())
15 main = app.cgirun() # 这行是发布到GAE的关键
其实就最后一行写对了就行了,其他地方没什么需要特别注意的。
3、接下来说说yaml文件的写法。这货是GAE的配置表,语法很简单。这里需要注意下静态文件的写法,写装静态文件的根目录就行了,你下面分root/css、root/js等也不需要分开写。
1 application: fuckGCD
2 version: 1
3 runtime: python
4 api_version: 1
5
6 handlers:
7 - url: /favicon\.ico
8 static_files: favicon.ico
9 upload: favicon\.ico
10
11 - url: /static
12 static_dir: static
13
14 - url: .*
15 script: application.py
4、最后,最重要的一点,就是你的template每次修改后都要编译。这很他妹恶心,不过只能忍了。编译的方法是在你项目的根目录下:
python web/template.py --compile app/views
后面的参数其实是你的静态文件的目录。编译出来的结果是在你的静态文件目录下生成一个__init__.py文件,GAE只读这个文件。
打开__init__.py来看,其实就是一堆这样的东西:
1 from web.template import CompiledTemplate, ForLoop, TemplateResult
2
3
4 # coding: utf-8
5 def formtest (form):
6 __lineoffset__ = -4
7 loop = ForLoop()
8 self = TemplateResult(); extend_ = self.extend
9 extend_([u'\n'])
10 extend_([u'<form name="main" method="post"> \n'])
11 if not form.valid:
12 extend_([u'<p class="error">Try again, AmeriCAN:</p>\n'])
13 extend_([escape_(form.render(), False), u'\n'])
14 extend_([u'<input type="submit" /> </form>\n'])
15
16 return self
17
18 formtest = CompiledTemplate(formtest, 'app/views\\formtest.html')
19 join_ = formtest._join; escape_ = formtest._escape
一个页面给你生成一个函数,仅此而已。
所以开发的时候,当你修改了静态文件时,你得每次先compile一下,这样才能看到修改。
在GAE上搞web.py要注意的就是这些了,剩下的按照web.py的游戏规则来就好了。