2

我正在尝试调试在 Google Appengine 灵活环境上运行的 Flask/Python 应用程序。

但是,我在 Google 控制台的 Stackdriver 调试界面中看到一条警告消息,并且无法设置任何断点。

警告内容如下:

Stackdriver Debugger 未针对 GAE Flex 上的 python 运行时设置

警告截图

对我做错了什么有任何想法吗?

我有:

  • 启用 Stackdriver Debugger API(如此所述)
  • 导入并初始化调试器(按照此处的说明)
  • 在 requirements.txt 中包含 google-python-cloud-debugger

main.py(app.yaml 中定义的应用入口点)

from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware

from wsgi import api, frontend, manage

try:
    import googleclouddebugger
    googleclouddebugger.AttachDebugger()
except ImportError:
    pass

app = DispatcherMiddleware(frontend.create_app(), {
    '/api': api.create_app(),
    '/manage': manage.create_app()
})

if __name__ == '__main__':
    run_simple('0.0.0.0', 5000, app, use_reloader=True, use_debugger=True)

应用程序.yaml

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 2

manual_scaling:
  instances: 1

resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

env_variables:
  SQLALCHEMY_DATABASE_URI: "postgresql+psycopg2://myusername:mypassword!@/instancename?host=/cloudsql/instancename"

beta_settings:
  cloud_sql_instances: "instancename"

更新 1

在发表评论并注意到 urllib 导入错误后,我想知道我的应用程序的 wsgi 特性是否导致了问题。我回到文档,看到一个关于 Django 框架做类似事情的注释并更改了以下内容:

googleclouddebugger.AttachDebugger()

googleclouddebugger.enable()

这摆脱了 urllib 导入错误,但还没有解决整体问题。

4

1 回答 1

1

我看不出这个配置有什么问题,但这里有一些建议:

  1. 打开 GCP Console 调试页面后,请确保在开始调试会话之前从顶部下拉菜单中选择了正确的应用版本。它可能指向不可调试的旧应用程序版本,或者页面和下拉菜单可能需要刷新以显示最新版本。

  2. 同样,请检查您的 Stackdriverstderr日志中是否包含如下行:

2017-12-24 15:14:14.000 PST I1224 23:14:14.600462 12 gcp_hub_client.py:335] Debuggee 注册成功,ID: gcp:1025611681465:7144dac417e43025

这意味着调试器实际上设置/工作正常,并且很可能表明 UI 需要刷新或从下拉列表中选择正确的应用程序版本。

  1. 确保文件google-python-cloud-debugger中有 。requirements.txt

  2. 考虑在/块中为调试器添加一个简单的print语句,如下所示:tryexcept

...
除了 ImportError 作为 e:
  print '导入谷歌云调试器失败:%s' % str(e)
  经过

然后,检查stderrStackdriver Logging 上的日志,看看是否打印了任何异常。

  1. 我不知道 werkzeug,但您可能想尝试通过传递禁用默认调试器use_debugger=False,以避免可能的冲突。

  2. 尝试部署一个更简单的烧瓶应用程序(例如,从此处为 Flex 的 hello world 开始,但将其修改为使用python_version: 2)并查看调试器是否适合您。

于 2017-12-24T23:41:27.967 回答