当前位置:  开发笔记 > 编程语言 > 正文

Google App Engine和404错误

如何解决《GoogleAppEngine和404错误》经验,为你挑选了3个好方法。

我在GAE上使用其他地方找到的提示设置了静态网站,但无法弄清楚如何返回404错误.我的app.yaml文件看起来像

- url: (.*)/
  static_files: static\1/index.html
  upload: static/index.html

- url: /
  static_dir: static

将所有静态html/jpg文件存储在静态目录下.以上适用于存在的文件,但如果不存在,则返回空长文件.答案可能是编写一个python脚本来返回404错误,但是如何设置为现有的静态文件提供服务但是为不存在的文件运行脚本呢?

以下是在开发应用程序服务器上获取不存在的文件(nosuch.html)的日志:

ERROR    2008-11-25 20:08:34,084 dev_appserver.py] Error encountered reading file "/usr/home/ctuffli/www/tufflinet/static/nosuch.html":
[Errno 2] No such file or directory: '/usr/home/ctuffli/www/tufflinet/static/nosuch.html'
INFO     2008-11-25 20:08:34,088 dev_appserver.py] "GET /nosuch.html HTTP/1.1" 404 -

Alexander Ko.. 37

您需要注册一个catch-all脚本处理程序.将其添加到app.yaml的末尾:

- url: /.*
  script: main.py

在main.py中,您需要输入以下代码:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class NotFoundPageHandler(webapp.RequestHandler):
    def get(self):
        self.error(404)
        self.response.out.write('')

application = webapp.WSGIApplication([('/.*', NotFoundPageHandler)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

替换为有意义的东西.或者更好地使用模板,您可以在这里阅读如何做到这一点.

如果您在设置时遇到问题,请告诉我.



1> Alexander Ko..:

您需要注册一个catch-all脚本处理程序.将其添加到app.yaml的末尾:

- url: /.*
  script: main.py

在main.py中,您需要输入以下代码:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class NotFoundPageHandler(webapp.RequestHandler):
    def get(self):
        self.error(404)
        self.response.out.write('')

application = webapp.WSGIApplication([('/.*', NotFoundPageHandler)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

替换为有意义的东西.或者更好地使用模板,您可以在这里阅读如何做到这一点.

如果您在设置时遇到问题,请告诉我.


这似乎不适用于static_dir子句.似乎static_dir中的任何丢失文件都返回其自己的(空)404页面,而不是直接传递给其他处理程序.
我试图这样做,但如果我设置404错误,无论是否使用模板都不会显示html.

2> 小智..:

谷歌应用引擎现在有自定义错误响应

所以你现在可以在你的app.yaml中添加一个error_handlers部分,如下例所示:

error_handlers:

- file: default_error.html

- error_code: over_quota
    file: over_quota.html


注意:这些自定义错误处理程序无法捕获404错误
注意:答案因此不回答问题

3> Zee Spencer..:

在不需要任何CPU周期的情况下执行此操作的一种非常简单的方法是将此处理程序放在app.yaml的底部

- url: /.*
    static_files: views/404.html
    upload: views/404.html

然后,您可以在视图目录中放置一个静态404.html文件.不需要python处理程序.app.yaml中未处理的任何内容都已经达到了.


这是错的.您不能使静态内容返回200以外的状态代码.
没有办法以这种方式返回404 HTTP响应代码,有吗?
是的,您所要做的就是将标题添加到HTML文件中.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有