我正在尝试调试在 Google Appengine 灵活环境中运行的 Flask/Python 应用。
但是,我在 Google Console 的 Stackdriver 调试界面中看到一条警告消息,并且无法设置任何断点。
警告内容如下:
Stackdriver Debugger is not set up for the python runtime on GAE Flex
对我做错了什么有什么想法吗?
我已经:
- 启用了 Stackdriver Debugger API(如前所述 here)
- 导入并初始化调试器(按照说明 here )
- 在 requests.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)
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 导入错误,但并未解决整体问题。
最佳答案
我认为此配置没有任何问题,但这里有一些建议:
打开 GCP Console 调试页面后,请确保在开始调试 session 之前从顶部下拉菜单中选择了正确的应用版本。它可能指向不可调试的旧应用版本,或者页面和下拉列表可能需要刷新才能显示最新版本。
同样,请检查您的 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/