BAE Python Django应用调试记录

    鉴于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代码部署工具。

你可能感兴趣的:(BAE Python Django应用调试记录)