【问题标题】:Error while deploying python in Google App Engine在 Google App Engine 中部署 python 时出错
【发布时间】:2018-12-11 18:15:13
【问题描述】:

我正在尝试部署 python 应用程序,但收到以下错误消息:

错误:(gcloud.app.deploy) 错误响应:[4] 您的部署有 未能在规定的时间内恢复健康,因此被滚动 背部。如果您认为这是一个错误,请尝试调整 “readiness_check”部分中的“app_start_timeout_sec”设置。

我的 app.yaml 是:

runtime: python
runtime_config:
  python_version: 3
env: flex
service: newservice
handlers:
- url: /
  script: hello.py

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

我认为问题与 yaml 文件有关,因为我之前部署了一个示例应用程序没有问题(在我的 yaml 上使用入口点),然后当我添加一个新的 python 脚本并在 yaml 文件中引用它时(使用处理程序来运行我的消息块)我开始收到此错误。

编辑: 在 GAEFan 的回答之后,我的问候包含了一个 readiness_check 处理程序:

def post():
    self.response.headers['Content-Type'] = 'application/json'   
    obj = {
      'status': 200, 
    } 
    self.response.out.write(json.dumps(obj))

webapp2.WSGIApplication([
    ('/readiness_check', post())
], debug=True)

【问题讨论】:

标签: python google-app-engine deployment cgi


【解决方案1】:

Readiness checks 默认启用。因此,您应该为它们设置 url 处理程序。在这种情况下,GAE 向/readiness_check 发送请求,但您的app.yaml 没有该网址的处理程序。试试这个:

handlers:
- url: /.*
  script: hello.py

并确保网址返回200 或类似的响应。自定义就绪检查:

readiness_check:
  path: "/readiness_check"
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 300

或者:

liveness_check:
  path: "/liveness_check"
  check_interval_sec: 30
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2

详情在:https://cloud.google.com/appengine/docs/flexible/custom-runtimes/configuring-your-app-with-app-yaml#legacy_health_checks

【讨论】:

  • 感谢您的指出。我仍然没有成功。我有两个 url: / 和 url: /.* 并尝试了准备和活动检查。我可能没有告诉你,我的部署一直在“更新服务”,并且在很长一段时间后我收到上述消息,所以我认为我无法收到 200 状态,如果 ii 是可能的,我该怎么办?
  • 在hello.py,你有/readiness_check 的url 处理程序吗?可以本地测试吗?
  • 我是新手。这个处理程序有意义吗? (是的,我的你好在本地工作) def post(): self.response.headers['Content-Type'] = 'application/json' obj = { 'status': 200, } self.response.out.write(json .dumps(obj)) webapp2.WSGIApplication([ ('/readiness_check', post()) ], debug=True)
  • 我已经编辑了我的问题,以包括我假定的处理程序以便更好地阅读
  • 实际上我现在收到错误消息:“等待 flex 部署成为网络配置时超时。”
【解决方案2】:

您在灵活环境应用程序中运行,handlers 配置是标准环境配置。您需要为柔性环境使用entrypoint 配置。来自Application startup:

运行时使用定义在 app.yaml。入口点应该启动一个响应的进程 到环境变量定义的端口上的 HTTP 请求 PORT.

如果没有它,您的应用将无法真正运行,并且无法满足运行状况检查请求。

也许有用:How to tell if a Google App Engine documentation page applies to the standard or the flexible environment

【讨论】:

  • 谢谢,这就是问题所在。我已将其更正为入口点:python hello.py,它现在可以工作了。
猜你喜欢
  • 2018-12-16
  • 2019-04-06
  • 2015-09-21
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多