【问题标题】:Route url to GAE Flex server while rest of site runs on GAE Standard将 URL 路由到 GAE Flex 服务器,而站点的其余部分在 GAE 标准上运行
【发布时间】:2019-04-15 23:38:28
【问题描述】:

使用 Google App Engine 标准 Python 2.7,我的 dispatch.yaml 中有一个路径来指定所有类型为“*/flex/*”的 url 以路由到 flex 服务。

dispatch.yaml 调度:

- url: '*/flex/*'
    module: flex

flex 环境是一个自定义的 python 3.7 运行时,通常使用以下命令执行:

python dev_appserver.py flex.yaml --custom_entrypoint="docker run -p 9090:8080 flex_app"

对于我环境中的其他服务,我尝试使用以下命令启动开发环境: python dev_appserver.py dispatch.yaml default.yaml sync.yaml task.yaml flex.yaml --custom_entrypoint="docker run -p 9090:8080 flex_app" --port=8080 --skip_sdk_update_check"

但是,当它启动时,当我需要从端口 9090 访问 flex 服务时,它会开始为每个服务分配本地 IP 地址。

示例服务器输出:

INFO     devappserver2.py:278] Skipping SDK update check.
INFO     dispatcher.py:223] Starting dispatcher running at: http://0.0.0.0:8080
INFO     dispatcher.py:256] Starting module "default" running at: http://0.0.0.0:8081
INFO     dispatcher.py:256] Starting module "sync" running at: http://0.0.0.0:8082
INFO     dispatcher.py:256] Starting module "task" running at: http://0.0.0.0:8083
INFO     dispatcher.py:256] Starting module "flex" running at: http://0.0.0.0:8084

如果我点击 URL localhost:9090,我就能成功访问 flex 应用程序。但是,如果我访问 localhost:8084 或 localhost:8080/flex/,我会收到错误:

503 - This request has timed out.

服务器日志反映了这一点,但没有显示实际错误:

INFO module.py:861] flex: "GET / HTTP/1.1" 503 59

是否可以将 url 从 GAE 标准环境分派到 Flex 环境并让它从其指定端口路由到所需的所需端口?我认为这是可能的,因为Google App Engine's Doc 指定可以将环境混合在一起。我还尝试通过强制 docker 在端口 8084 上运行来解决此问题,但端口无法共享。

【问题讨论】:

    标签: python google-app-engine google-app-engine-python


    【解决方案1】:

    通过查看dev_appserver.py --help 找到了这个。事实证明,这个问题的答案只是将 custom_entrypoint 更改为命令docker run -p {port}:8080 flex_app,这会自动将 GAE 随机分配的端口转发到 docker 实例。

    --custom_entrypoint CUSTOM_ENTRYPOINT
                            specify an entrypoint for custom runtime modules. This
                            is required when such modules are present. Include
                            "{port}" in the string (without quotes) to pass the
                            port number in as an argument.
    

    【讨论】:

      【解决方案2】:

      开发服务器只能用于第一代标准环境应用,不支持灵活应用,见How to use Python 3 with Google App Engine's Local Development Server

      认为您的尝试最终只是将服务作为标准环境运行,而不是灵活的环境(正确运行的可能性很小)。

      要正确运行,您必须将其从本地 dev_server 执行中删除。到灵活服务的跨服务链接需要在本地进行某种破解才能使用 9090 端口(通过 env 变量或只是一些硬编码值),在这种情况下您将无法使用 dispatch.yaml 路由(因为本地开发服务器不会知道灵活服务的存在)。

      【讨论】:

      • 这实际上运行良好,我添加了我发现 GAE Flex 和 Standard 可以无缝工作的解决方案。
      • 嗯,很高兴知道这正在改变,还没有documented。我猜服务器会从flex.yaml 文件中找出--custom_entrypoint 中提到的flex_app 服务。我想我需要玩一下这个:)
      猜你喜欢
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 2011-05-06
      • 2013-11-09
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多