【问题标题】:Google Cloud Debugger not working for Python AppEngine Managed VMsGoogle Cloud Debugger 不适用于 Python AppEngine 托管的虚拟机
【发布时间】:2015-12-08 08:46:52
【问题描述】:

正如今天在Production Troubleshooting with Cloud Debugger now available for Python 中宣布的那样,我现在应该可以使用 Python 调试器了。

我在 GCE 映像上运行 AppEngine 托管虚拟机,因此我遵循Setting up Python on Compute Engine 的指南。我已经修改了我的 Dockerfile 以添加 pip install google-python-cloud-debugger(我也尝试将库直接安装到我的 app/lib 中,它包含在我的 sys.path 中):

FROM gcr.io/google_appengine/python-compat
RUN pip install google-python-cloud-debugger
ADD . /app

然后我修改了我的 main.py 以启用调试器:

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

不幸的是,当我提交代码时,运行gcloud preview app gen-repo-info-file 并推送它,我无法使用调试器。当我转到https://console.developers.google.com/debug 时,它会在右侧加载我的 github 存储库,但我在左侧导航区域看到一条错误消息:

调试不可用。您可以调试正在运行的 Java 应用程序 在 App Engine 或 Compute Engine 上

有什么想法可能会出错,或者如何调试调试器?

【问题讨论】:

    标签: google-compute-engine google-app-engine-python managed-vm google-cloud-debugger


    【解决方案1】:

    虽然其他线程确实提供了很多机会来遵循常见的最佳调试实践,但解决方案比我们想象的要简单得多。您看到的错误很可能是由于使用 python 的托管 VM 还不是云调试器支持的平台,according to the documentation

    但是,随着 Cloud Debugger 服务的发展,以及使用 python 的 Cloud Debugger 完全是just announced on the 7th,这种情况肯定会发生变化。

    如果您发现缺少某些内容并希望让我们知道您和其他可能对该问题加注星标的人感兴趣,请随时在 Cloud Platform Public Issue Tracker 中提出功能请求。

    【讨论】:

    • 啊,我原以为“在 Google Compute Engine 实例上运行的任何 Python 应用程序”捕获了“在 GCE 实例上运行的 Python 托管 VM 应用程序”案例,但查看 Java 支持的平台就可以了更清楚的是,托管 VM 尚不受支持。谢谢!
    • googlecloudplatform.blogspot.tw/2016/02/… 提到:“在此版本中,Cloud Debugger 现在可用于以下语言和平台:在 App Engine 上运行的 Python 应用程序、App Engine 托管 VM 和 Compute Engine”但是,我可以不要让调试器找到可调试的应用程序,cloud.google.com/debugger 的官方文档仍然说“Python App Engine 应用程序在 App Engine 上运行”。 (并且不要提及托管虚拟机)。所以...我认为博客文章是错误的?
    【解决方案2】:

    编辑:虽然此答案的线程包含有用的调试步骤,但问题的根本原因已在我发布的其他答案中进行了解释。

    这里可能发生了两件事:

    首先是您的 pip 命令,以普通用户身份运行,想要访问系统安装位置,并且在没有 root 权限的情况下失败。试试sudo pip install...pip install -t lib/ google-python-cloud-debugger

    发生的第二件事是您的代码捕获了 ImportError 并且只是 passing。我以前作为一个说蟒蛇的人在我的生活中见过这种结构,老实说,如果我见过的话,它就是一把霰弹枪。 pass 有什么用途?如果您采取这种预防措施,错误日志会很快显示问题。

    【讨论】:

    • 对于您提到的两个问题,我一直在逐字跟踪上面的 Google 文档。 (非 sudo pip 和 quiet-pass。)所以也许值得告诉文档作者也修复该文档?对于安静通行证,我添加了一个日志记录语句,但我不知道我会在哪里看到它。它不会出现在每个 servlet 日志中(因为它在 wsgi 服务器初始化之前),也不会出现在 VM 实例的串行控制台输出中。我的 main.py 中还有其他日志,我也从未在 prod 中看到过。
    • 就 pip 而言,我已尝试将 googleclouddebugger 库安装到我推送的 lib/ 中,如我最初的问题中所述。它不起作用,但也许它正在取得更多进展?看起来每个请求立即 500 秒(没有任何日志输出)。 “/mapreduce/controller_callback”请求返回 200,但它们通过我的 app.yaml 路由通过不同的 wsgi 服务器/模块,所以我不确定这有多相关。如果我在我的应用程序直接运行 500 秒时打开云调试器,它会继续告诉我相同的错误消息:“调试不可用”
    • 如果使用这样的文件夹,您需要将lib/ 添加到您的python 路径中。 sudo 是否有助于使模块全局可见?
    • 我将它安装到一个推送的 lib/ 目录中,该目录已经有我成功使用的其他库(即,它已经在我的路径中)。我对这种方法很好,所以我从未尝试过 sudo。事实上,在从 lib/ 加载后,行为现在会发生 500 秒的变化,我认为它可以在 lib/ 中正确找到,并且没有特别的理由尝试 sudo ...?
    • 为什么提供 500 个?某处应该有日志。你能检查托管 Docker 进程本身的 GCE 实例吗?
    【解决方案3】:

    检查 Python Cloud Debugger 是否正确安装的最简单方法是尝试在 Python 交互式控制台中导入它:

    docker run -i -t cdbgtest bin/bash
    python
    import googleclouddebugger
    print googleclouddebugger.__version__
    

    我的猜测是,在您的情况下,pip install google-python-cloud-debugger 失败了。如果是这种情况,可能是由于过时的pip。将pipsudo easy_install pip 一起安装即可解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      相关资源
      最近更新 更多