不可能使用app.yaml 模式路由,因为这些模式仅应用于所请求 URL 的文件路径部分(没有域名)。
是的,模块可以映射到不同的域,路由基于dispatch.yaml 文件,看起来有点像这样:
dispatch:
- url: "mydomain.com/*"
module: naked_domain_module
- url: "*mydomain.com/*"
module: subdomain_module
注意事项:
-
dispatch.yaml 中的规则顺序很重要 - 第一场比赛获胜
- 没有匹配的请求被发送到默认模块(您可能需要重新调整规则顺序/内容,具体取决于您是否要将模块之一设为默认模块)
- 您无法在开发服务器(不支持主机名路由)上测试此路由,除非您在请求路径中还有更具体的模式 - 可能仅用于本地测试? - 您可以为其添加调度规则,
像这样:
- url: "*/naked/*"
module: naked_domain_module
但在这种情况下,您还需要考虑 naked_domain_module 的 app.yaml 路由中添加的路径模式,并在生产中部署时恢复它。如果您在生产中保留此路径模式,那么您不需要所有这些模块故事,因为您可以直接在 app.yaml 中锁定它。
澄清:仅使用调度文件的自动路由不适用于本地开发服务器,模块工作正常,除非您需要自己向相应的模块“域”(实际上是不同的侦听端口)发出请求。这是开发服务器在这种情况下的行为示例,显示了每个模块的基本 URL:
/usr/bin/python2.7 /usr/local/google_appengine/dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml
WARNING 2016-08-16 16:11:18,474 application_configuration.py:786] Hostname routing is not supported by the development server. The following dispatch entries will not match any requests:
<DispatchEntry
url=buildin-dot-myapp.appspot.com/*
service=None
module=buildin
>
INFO 2016-08-16 16:11:18,506 sdk_update_checker.py:229] Checking for updates to the SDK.
INFO 2016-08-16 16:11:18,716 sdk_update_checker.py:257] The SDK is up to date.
INFO 2016-08-16 16:11:18,884 api_server.py:205] Starting API server at: http://localhost:36398
INFO 2016-08-16 16:11:18,885 dispatcher.py:185] Starting dispatcher running at: http://0.0.0.0:8080
INFO 2016-08-16 16:11:18,890 dispatcher.py:197] Starting module "default" running at: http://0.0.0.0:8081
INFO 2016-08-16 16:11:18,893 dispatcher.py:197] Starting module "buildin" running at: http://0.0.0.0:8082
INFO 2016-08-16 16:11:18,897 admin_server.py:116] Starting admin server at: http://localhost:8000