GAE:创建新脚本时出现404错误

时间:2014-01-10 06:22:22

标签: python google-app-engine

我在Python环境中使用Google App Engine。

我的主要代码在main.py文件中。我想为不同的页面创建一个新的.py文件。 我创建了.py文件,添加了yaml文件的路径。但我仍然得到'404错误,找不到资源'。

这是我的yaml文件

application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: .*
  script: main.app

- url: /hello
  script: hello.app

libraries:
- name: webapp2
  version: "2.5.2"

当用户访问exampleurl.com/hello时,我希望执行hello.py文件。

这是hello.py的当前内容

import webapp2

class HeyPage(webapp2.RequestHandler):
  def get(self):
      self.response.headers['Content-Type'] = 'text/html'
      self.response.out.write('Hello, All!')

app = webapp2.WSGIApplication([('/hello', HeyPage)],
                              debug=True)

这是日志:

INFO     2014-01-10 06:15:31,150 module.py:617] default: "GET /hello HTTP/1.1" 404 154

2 个答案:

答案 0 :(得分:2)

您应该列出从最具体到最不具体的处理程序。你的经纪人:

- url: .*
  script: main.app

基本上说main.app应该处理每个网址。由于它是列表中的第一个,main.py将尝试处理每个请求,无论app.yaml中跟随它的处理程序如何。将其更改为:

handlers:
- url: /hello
  script: hello.app

- url: .*
  script: main.app

所有人都应该工作。

答案 1 :(得分:1)

据我所知,GAE将URL与从上到下的处理程序中的模式匹配。 。*与任何URL匹配,因为它是处理程序部分中的第一个模式,它调用main.app而不是hello.app。您应该在处理程序部分的末尾放置。* pattern,以便任何与之前定义的任何URL模式都不匹配的URL由main.app处理。

因此,请将处理程序部分修改为:

application: myapp 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: yes

handlers:
- url: /hello   
  script: hello.app

- url: .*   
  script: main.app

libraries:
- name: webapp2   
  version: "2.5.2"