python - "Stackdriver Debugger is not set up for the python runtime on GAE Flex"警告

标签 python google-app-engine debugging google-cloud-stackdriver google-cloud-debugger

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

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

警告内容如下:

Stackdriver Debugger is not set up for the python runtime on GAE Flex

Screenshot of warning

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

我已经:

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

ma​​in.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)

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"

更新 1

在发表评论并注意到 urllib 导入错误后,我想知道我的应用程序的 wsgi 性质是否导致了问题。我又回到documentation ,看到有关 Django 框架执行类似操作的注释并更改了以下内容:

googleclouddebugger.AttachDebugger()

googleclouddebugger.enable()

这消除了 urllib 导入错误,但并未解决整体问题。

最佳答案

我认为此配置没有任何问题,但这里有一些建议:

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

  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 需要刷新或从下拉列表中选择正确的应用程序版本。

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

  • 考虑在调试器的 try/ except block 中添加一个简单的 print 语句,如下所示:

  • ...
    except ImportError as e:
      print 'Failed to import Google Cloud Debugger: %s' % str(e)
      pass
    

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

  • 我不了解 werkzeug,但您可能想尝试通过传递 use_debugger=False 来禁用默认调试器,以避免可能的冲突。

    <
  • 尝试部署一个更简单的 Flask 应用(例如,从 here 开始使用 Flex 的 hello world,但将其修改为使用 python_version: 2)并查看调试器是否适合您那里。

  • 关于python - "Stackdriver Debugger is not set up for the python runtime on GAE Flex"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954574/

    相关文章:

    具有 try/except 的函数的 Python 单元测试

    java - 在 App Engine 上为 servlet 创建类似 REST 的 url 映射

    java - 如何在不指定完整 url 的情况下使用 URL 连接调用 localhost servlet?

    eclipse :Edit the source and continue debugging

    python - 为什么第一次替换不匹配?

    python - 直方图隐藏空箱

    python - 如何使用金雅拓 Prox-SU 读卡器访问 MIFARE 1k 内存块?

    django - 我们现在可以在 Django 中使用 GAE 中的 ORM 吗?

    PHP 和 shell_exec

    debugging - 关于 ECLIM 的简短 HOW TO