空白页面但无错误 - Python Appengine
我在我的appengine Python网站上遇到了偶尔出现的空白页面。通常,这种情况发生在启动新进程或清空缓存时。会先显示一页空白的白色页面,之后一切就正常了。
这基本上和这里的错误是一样的:
http://groups.google.com/group/google-appengine/browse_thread/thread/c072383dc970e450
不过,我已经仔细检查过我的Python文件,确保代码是正确的(以下是复制粘贴的内容):
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
这是日志中生成空白页面的一个示例响应:
01-02 04:46AM 48.539 / 200 188ms 570cpu_ms 383api_cpu_ms 0kb
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.19 Safari/534.13,gzip(gfe),gzip(gfe),gzip(gfe) 86.164.42.252 - tjcritchlow [02/Jan/2011:04:46:48 -0800] "GET / HTTP/1.1" 200 124 - "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.19 Safari/534.13,gzip(gfe),gzip(gfe),gzip(gfe)" "www.7bks.com" ms=188 cpu_ms=570 api_cpu_ms=383 cpm_usd=0.016028 I 01-02 04:46AM 48.724 Saved; key: appstats:008500, part: 82 bytes, full: 92081 bytes, overhead: 0.001 + 0.005; link: http://www.7bks.com/stats/details?time=1293972408543
欢迎任何建议,看看我该如何进一步调试或解决这个问题。
我有几个不同的Python文件,这里是我app.yaml中的处理程序。但我已经检查过所有文件,确保它们的底部都有正确的name代码。
handlers:
- url: /admin/.*
script: admin.py
login: admin
- url: /googleanalytics/
script: googleanalytics.py
login: admin
- url: /cleanupsessions/
script: cleanupsessions.py
login: admin
- url: /robots.txt
static_files: robots.txt
upload: robots.txt
- url: /favicon.ico
static_files: images/favicon.ico
upload: images/favicon.ico
- url: /images
static_dir: images
- url: /css
static_dir: css
- url: /jquery
static_dir: jquery
- url: /.*
script: 7books.py
error_handlers:
- file: customerror.html
问题可能出在我导入的某个库上吗?我应该检查所有库,确保它们都有name代码吗?
3 个回答
确保你的Python代码缩进是一致的。比如,要么使用制表符(Tab),要么使用4个空格,或者2个空格……不要在同一个函数里混用这些缩进方式。这对我来说解决了问题!这点很烦人,因为对人来说,制表符和4个空格看起来是完全一样的。
我刚刚解决了这个问题,之前真是烦死我了。
我把我的脚本文件改名成了'site.py',结果把它改回'main.py'后,一切问题都解决了。
我猜可能是因为Python自带的'site'模块在我的类路径中优先级更高,所以我的'site.py'文件被覆盖了。如果有人知道更多的情况,请在这里留言。
关于空白页面的问题,调试起来可能会有点复杂,除非你能把问题缩小到你代码的某个特定部分或者GAE(Google App Engine)堆栈。
Appstats是GAE的一个工具,它会在每个网页请求中插入(作为WSGI中间件),记录性能、调试和其他一些请求信息,并把这些信息汇总到一个管理界面,你可以通过GAE的管理网站访问它。这个工具可以帮助你查看错误的追踪信息,并监控你的网站错误(安装了appstats后,错误会在请求列表中以黄色框的“E”标记显示)。
首先,你应该按照以下链接的说明设置Appstats:
http://code.google.com/appengine/docs/python/tools/appstats.html
这个链接会告诉你关于每个请求的很多有用信息,特别是那些出错的请求,包括一个Python追踪信息,里面会说明出了什么问题,以及在调用堆栈的哪个地方出错,这就像你在本地使用Google App Engine Launcher或者Python CLI或iPython调试代码时看到的那样。
然后,下次你看到空白页面时,去你的管理页面或者appstats,登录后,你就会看到一个追踪信息,告诉你代码的哪个地方出了问题。
很可能只是某个地方提前返回了结果,或者代码中有未处理的边缘情况,但在你没有appstats查看请求日志和调试错误之前,也可能是其他意外的原因。
一旦你安装了Appstats并重现了这个问题,把追踪信息粘贴到上面(记得去掉追踪信息中可能包含的任何用户信息,比如密码),我会根据这些信息来调整我的回答。