鉴于bae与sae是国内少有的app engine. 且bae又后来居上、可用git版本管理,于是试用此平台挂一个测试Python Django应用。
但百度云的Python文档还真是少的可怜,又没怎么维护,都让我怀疑到底这货百度要不要了。文档传送门。bae支持Django 1.4版本,主流是1.5,将就着用。
http://901314.duapp.com/就是拙作,页面中唯一的超链接hello的实现方式是调用Django中的一个app。依着简陋的文档修修补补push两回后,超链接hello居然是404错误,顿时乱了手脚。这么简单的测试也出错,但bae又不给调试信息,于是乱七八糟的搞了一会还是没见效。最后想想,可能是git上传了.pyc字节码文件捣乱,删除bae上的所有代码,重新push一份干净的demo,终于hello链接可以跳转了,记录庆祝下,SE来爬我的网页吧哈哈。以后试试动态生成内容。
示例源码http://git.oschina.net/397667796/bae_django,来fork吧。
ps: bae好像也会出调试信息,把调试打开,访问不存在的地址http://901314.duapp.com/hellos,出现下面与本地一样的debug信息,那为什么之前超链接出问题不出debug信息呢?==!
Page not found (404)
Request Method: GET
Request URL: http://901314.duapp.com/hellos
Using the URLconf defined in bae_django.urls, Django tried these URL patterns, in this order:
^$ [name='home']
^hello/$ [name='hello']
The current URL, hellos, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
2013.07.10 更新:
源代码增加BAE版本1,测试调用非默认的Django 1.4库,而是调用应用目录下的Django 1.5.1库,测试成功。参考http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/python/faq。但总共几M的git包,竟push到BAE失败,提示如下。哪位知道如何解决的,多谢回复。
Counting objects: 4592, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2499/2499), done.
efrror: RPC failed; result=22, HTTP code = 411| 1.23 MiB/s
Watal: The remote end hung up unexpectedly
Writing objects: 100% (4588/4588), 3.04 MiB | 957 KiB/s, done.
Total 4588 (delta 1209), reused 1 (delta 0)
fatal: The remote end hung up unexpectedly
Everything up-to-date
2013.07.11 更新:
今天折腾半天,终于弄清“超链接hello居然是404错误”的原因,在于app.conf文件,出现错误的静态资源文件配置如下。
(2013.07.11晚更新:此配置是对未使用Django框架,所有路由由app.conf处理,不论是目录(/)、静态文件(/static/$1)、还是(动态脚本)):
handlers:
- url : /
script: index.py
- url : /(.*).py
script: $1.py
- url : /static/(.*)
script: /static/$1
- expire : .jpg modify 10 years
- expire : .swf modify 10 years
- expire : .png modify 10 years
- expire : .gif modify 10 years
- expire : .JPG modify 10 years
- expire : .ico modify 10 years
而正确的配置文件是下面这样的,区别在于对index.py的映射路径。(2013.07.11晚更新:些时因app.conf与Django的urls.py一起接管路由,虽未彻底了解他们的协作,但暂时的理解是app.conf位于处理流水线的第一位,且依其文件内路由的顺序执行。如((/.*)代表所有网址除位于之前过滤过的)路由全由index.py处理,而index.py是BAE上应用的入口,(/.*)地址的具体内容之后再交由Django的urls.py处理,这样两者的定位就清楚了。下面app.conf的配置中,把/static/(.*)放在前面是因为项目在发布时,一般把所有的静态文件从项目中的apps汇集放在/static/目录下,统一在Python代码之前由app.conf接管静态文件的路由, 其中一个目的应该就是为提高效率。参考BAE路由配置http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/manage/conf 与 SAEhttp://python.sinaapp.com/doc/quickstart.html 及始祖Googlehttps://developers.google.com/appengine/docs/python/config/appconfig?hl=zh-cn)
handlers:
- url : /static/(.*)
script : /static/$1
- url : /.*
script : index.py
- expire : .jpg modify 10 years
- expire : .swf modify 10 years
- expire : .png modify 10 years
- expire : .gif modify 10 years
- expire : .JPG modify 10 years
- expire : .ico modify 10 years
坐等大神们帮忙解释。再PS: 从BAE的目录发现,其居然用新浪的codefs代码部署工具。
来源:oschina
链接:https://my.oschina.net/u/225435/blog/143553