Google App Engine 模块:关于路由(dispatch.yaml)困惑
经过深入研究这个问题,似乎问题不在于路由,而是模块中端点的使用。新问题在 GAE模块和Google端点
我正在将一个GAE应用程序迁移到模块中,但我对路由感到困惑,因为有些查询能够正确路由,但并不是所有的查询都能。
我在根文件夹中有一个dispatch.yaml文件。请注意,api模块使用的是Google Cloud Endpoints API。
application: testapp
dispatch:
- url: "*/foo/*"
module: foomodule
- url: "*/_ah/spi/*"
module: api
- url: "testapp.appspot.com/"
module: default
然后每个模块名都有一个文件夹,每个文件夹里都有一个yaml文件,定义了URL模式和处理程序,比如我的默认模块的/www/www.yaml。
application: testapp
version: alpha
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /static
static_dir: static
- url: /.*
script: www.app
libraries:
- name: webapp2
version: latest
像这样的查询 http://testapp.appspot.com/xxx 能够正确重定向到默认模块,而/foo/xxx的请求则由foomodule处理,但API请求(/_ah/spi/xxx)却返回到默认模块,并显示404错误。
不过,我可以在映射到api模块的实例日志中看到/_ah/spi/BackendService.logMessages的200 OK响应。 这个请求来自alpha-dot-api-dot-testapp.appspot.com,而404错误则只来自testapp.appspot.com。(注意:我希望我的查询能够从testapp.appspot.com正常工作)
我是不是做错了什么?另外,有没有办法列出当前服务器上使用的配置,以确保它正确部署了?
1 个回答
把接口(api)分离到一个单独的模块里,然后用dispatch.yaml来设置路由,这个想法很吸引人,但在使用dev_appserver.py的时候,似乎做不到这一点。根据这段代码:https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/devappserver2/dispatcher.py?r=411#704
if (not path.startswith('/_ah/') or
any(path.startswith(wl) for wl
in DISPATCH_AH_URL_PATH_PREFIX_WHITELIST)):
return True
else:
logging.warning('Skipping dispatch.yaml rules because %s is not a '
'dispatchable path.', path)
return False
任何以 /_ah/
开头的路径都不能被分发。