4

次のyamlファイルを使用したGoogle App Engineプロジェクトがあります

handlers:
- url: /web/.*
  script: web_server.app

- url: /api/.*
  script: rest_server.app

自分が所有するドメインのサブドメインが、rest_server.app スクリプトによって提供されるようにするにはどうすればよいですか。

例: 私が example.com を所有している場合

私は によって奉仕されたいexample.comweb_server.appそしてによってapi.example.com奉仕されたいrest_server.app

Google App Engine を使用してそれを行うことは可能ですか。

例:

handlers:
- url: example.com/.*
  script: web_server.app
- url: api.example.com/.*
  script: rest_server.app
4

1 に答える 1

8

のリクエスト ルーティングはapp.yaml、URL のドメイン名に基づくルーティングには使用できません。Handlers 要素のドキュメント セクションのurl表の行を参照してください。

urlそのため、リクエストをいずれかのスクリプトにルーティングするためにハンドラーの構成で現在使用している URL のファイルパス部分を同時に削除しながら、単一のモジュール/サービスでアプリを提供することはできません。

アプリを 2 つの個別のサービス/モジュールに分割し、それぞれが 1 つのスクリプトを処理することで、必要なものを取得できます。モジュールの 1 つをデフォルト モジュールにする必要があります。これを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ルートに一致しないリクエストは、デフォルトでデフォルト モジュールにルーティングされます。

- url: "api.example.com/*"
  module: rest

ここでより完全な例を見つけることができます: https://stackoverflow.com/a/34111170/4495081

example.com 次に、ネイキッド ドメインapi.example.com サブドメインの両方をアプリにマップします。ネイキッド ドメインとサブドメインを構成するときにわずかに異なるセクションに特に注意して、アプリケーションのカスタム ドメインを追加する手順に従います。https://stackoverflow.com/a/36317462/4495081も参照してください。

問題が 1 つあります。ホスト名に基づくdispatch.yamlルーティングは、ローカルの開発サーバーでは機能しません。モジュール宛てのリクエストは、rest実際にはモジュールに送られdefaultます。

より簡単な回避策はrest、ローカル devserver のrestモジュールがリッスンする実際の localhost:PORT URL にモジュール クライアントを誘導することです (dev サーバーの起動時にターミナルに表示されます)。

これは、すべてのケースまたはすべてのアプリで可能であるとは限りません。たとえば、アプリが自動生成された URL を使用してクロスモジュール リクエストを行う場合は問題です。

このような場合、これを回避するために、rest.yamlURL に小さなパス部分を一時的に挿入できます。これは、ローカルの開発サーバーで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
于 2016-11-23T15:25:39.840 に答える