請求路由不能用於基於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服務。我只是注意到了可能的混淆不一致:) –