【问题标题】:Unable to connect to containerized Django web server while running Pycharm remote debugging session运行 Pycharm 远程调试会话时无法连接到容器化的 Django Web 服务器
【发布时间】:2019-06-03 17:42:00
【问题描述】:

我有一个在 Docker-compose 配置中运行的 Django 应用程序,我希望能够从 Pycharm 交互式地调试它。我第一次尝试使用 Pycharm 的内置 Docker Compose 配置进行调试,但失败了(结果:应用程序运行并且可以访问,但调试不可用,我怀疑是因为 a known bug where the debugger fails to connect if the entrypoint script takes too long to return)。我现在正在尝试使用 pydevd 进行远程调试来设置调试,大致遵循instructions contained here 并总结如下:

  • 在 Pycharm 中添加 Python 远程调试器运行配置
  • 在我的 Django 应用程序中,将 pycharm-debug-py3k.egg 复制到根目录,将其添加到路径中,导入 pydevd 并在我的应用程序代码中对其进行初始化,如下所示:

    import sys sys.path.append("pycharm-debug-py3k.egg") import pydevd pydevd.settrace('ip.address.of.my.machine', port=4444)

  • 在 Pycharm 中启动调试器

  • 使用docker-compose up 启动我的应用程序
  • 按调试器中的播放/恢复程序按钮

这样做的结果是,在 Pycharm 中,调试器控制台报告连接处于活动状态(“已连接到 pydev 调试器”)。调试器选项卡显示了我将代码 sn-p 添加到的文件中存在的预期变量和值。我的 Django 应用程序的容器日志中没有出现任何错误,并且日志显示了正常 Django 启动的预期输出。但是,无法从 Web 浏览器访问我的应用程序,并且尝试在容器中运行单元测试会挂起而没有响应。键盘中断单元测试后,我在底部收到一条带有此消息的堆栈跟踪:

   File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1392, in _locked_settrace
     time.sleep(0.1)  # busy wait until we receive run command
 KeyboardInterrupt

我已经删除了所有断点,删除了.idea,重新启动了Pycharm,重新启动了Docker,并确认如果我删除了pydevd 代码,sn -p 所有单元测试和Web 服务器都按预期运行。

【问题讨论】:

    标签: python django docker pycharm


    【解决方案1】:

    我一发布就找到了答案——我将代码 sn-p 添加到了错误的文件中。当我将它添加到我的根应用程序的__init__.py 并重新启动调试服务器时,它按预期工作,打破了我在 Pycharm 中标记断点的位置(至少在使用 Web 浏览器访问时,运行单元测试仍然没有乐趣) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-02
      • 2010-11-04
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多