“没有为GAE Flex上的python运行时设置Stackdriver Debugger”警告

问题描述 投票:1回答:1

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

但是,我在Google Console的Stackdriver Debug界面中看到一条警告消息,无法设置任何断点。

警告如下:

没有为GAE Flex上的python运行时设置Stackdriver Debugger

Screenshot of warning

对我做错了什么的想法?

我有:

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

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

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)

的app.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"

Update 1

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

googleclouddebugger.AttachDebugger()

googleclouddebugger.enable()

这摆脱了urllib导入错误,但尚未解决整体问题。

python google-app-engine debugging google-cloud-stackdriver google-cloud-debugger
1个回答
1
投票

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

  1. 打开GCP控制台调试页面后,请确保在开始调试会话之前从顶部下拉菜单中选择了正确版本的应用程序。它可能指向一个不可调试的旧应用程序版本,或者页面和下拉列表可能需要刷新才能显示最新版本。
  2. 同样,请检查您的Stackdriver stderr日志是否包含如下所示的行:
2017-12-24 15:14:14.000 PST I1224 23:14:14.600462 12 gcp_hub_client.py:335] Debuggee registered successfully, ID: gcp:1025611681465:7144dac417e43025

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

  1. 确保你在google-python-cloud-debugger文件中有requirements.txt
  2. 考虑在调试器的print / try块中添加一个简单的except语句,如下所示:
...
except ImportError as e:
  print 'Failed to import Google Cloud Debugger: %s' % str(e)
  pass

然后,检查堆栈驱动器日志记录中的stderr日志,看看是否打印了任何异常。

  1. 我不知道werkzeug,但您可能想尝试通过传递use_debugger=False来禁用默认调试器,以避免可能的冲突。
  2. 尝试部署一个更简单的烧瓶应用程序(例如,从here开始使用Flex的hello world,但修改它以使用python_version: 2)并查看调试器是否适合您。
© www.soinside.com 2019 - 2024. All rights reserved.