GAE模块与Google端点

1 投票
1 回答
573 浏览
提问于 2025-04-18 09:15

我正在把一个GAE应用迁移到模块上,但在我的api模块的路由上遇到了一些问题,这个模块是基于Google Endpoints的。

简单来说,我所有的API请求都被路由到了默认模块,而其他的路由则正常工作。

我的文件结构是:

- /gae
-- dispatch.yaml
-- www/
---- www.yaml
---- [www module files]
-- foo/
---- foo.yaml
---- [foo module files]
-- api/api.yaml
---- api.yaml
---- [foo module files]

dispatch.yaml

application: testapp

dispatch:
  - url: "testapp.appspot.com/"
    module: default
  - url: "*/_ah/spi/*"
    module: api
  - url: "*/_ah/api/*"
    module: api
  - url: "*/foo/*"
    module: foomodule        

我使用以下命令进行部署:

cd gae
appcfg.py update www/www.yaml upload/upload.yaml api/api.yaml
appcfg.py update_dispatch .

我可以看到有3个实例(每个模块一个)被部署。

但是接下来:

  • http://testapp.appspot.com/xxx这样的请求正确地被路由到了默认模块/实例
  • /foo/xxx的请求被foomodule处理
  • API请求(/_ah/spi/xxx)却被路由到了默认模块,并返回了404错误。
  • 奇怪的是,当我启动应用时,我可以在api实例的日志中看到/_ah/spi/BackendService.logMessages返回了200 OK。

从日志中我还看到:

  • 之前的logMessage 200 OK来自alpha-dot-api-dot-testapp.appspot.com
  • api模块的404错误来自testapp.appspot.com
  • 然而,非默认模块的200 OK也来自testapp.appspot.com

我是不是做错了什么?使用Google Endpoints作为模块时,需要特别的路由设置吗?

1 个回答

1

我看到API是默认模块,在文档中说“默认模块必须先上传”,另外你还需要在yaml文件中加入参数“module: default”,或者根本不包含这个参数。试试看吧。

appcfg.py update  api/api.yaml www/www.yaml upload/upload.yaml #api first
appcfg.py update_dispatch

撰写回答