请求路由不能用于基于URL的域名路线,看到Handlers element文档部分url
表行。
因此,您不能真正拥有一个为您的应用程序提供服务的模块/服务,同时剥离您当前在处理程序中使用的URL的文件路径部分'url
配置将请求路由到一个脚本或另一个脚本。
你可以通过将你的应用分成两个独立的services/modules来获得你想要的东西,每个处理一个脚本。其中一个模块必须是默认模块,我会默认使用web
。 将使用文件dispatch.yaml
根据URL主机名将请求路由到各自的模块。
的web.yaml
文件将包含:
module: default
handlers:
- url: /.*
script: web_server.app
的rest.yaml
文件将包含:
module: rest
handlers:
- url: /.*
script: rest_server.app
在dispatch.yaml
文件,你只需要在非默认模块(S)的路线,要求匹配没有路由默认路由到默认模块:
- url: "api.example.com/*"
module: rest
您可以在这里找到一个更完整的例子:https://stackoverflow.com/a/34111170/4495081
那么你既映射你的example.com
裸域和api.example.com
子域到您的应用程序。遵循Adding a custom domain for your application过程,特别注意配置裸域与子域时略有不同的部分。另请参见https://stackoverflow.com/a/36317462/4495081
有一个问题,寿 - 基于主机名不与本地开发服务器工作dispatch.yaml
路由,目的地为rest
模块的要求实际上去了default
模块。
更简单的解决方法是将rest
模块客户端指向本地devserver的rest
模块监听的实际localhost:PORT URL(在dev服务器启动时显示在终端上),取而代之。
这可能不可能在所有情况下或所有的应用程序。例如,如果应用使用自动生成的URL发出跨模块请求,则会出现问题。
在这种情况下,要解决它,你可以暂时插入在rest.yaml
URL小路径部分,只在本地开发服务器上测试rest
模块中(你需要在客户端匹配的变化和/或跨模块URL生成逻辑):
module: rest
handlers:
- url: /api/.*
script: rest_server.app
然后你就可以添加不是基于主机的一个dispatch.yaml
规则,也将与本地开发服务器。这可以在离开那里永久,它不会伤害,如果/当部署在生产中当临时rest.yaml
变化是相反的:
- url: "api.example.com/*"
module: rest
- url: "*/api/*"
module: rest
刚刚澄清,你的2个脚本实际上不是GAE ** **服务(正如帖子标题中提到的),它们在您的应用程序的单一/'默认'GAE服务中只是不同的**脚本**。您将在下面看到与我的答案有所不同 - 解决方案*基于GAE服务。我只是注意到了可能的混淆不一致:) –