如何使用远程 pdb 连接调试在 Heroku 上运行的 Django 应用程序?

2023-12-23

为了调试我在 Heroku 上看到但在本地计算机上没有看到的错误,我尝试进行逐步调试。

典型的import pdb; pdb.set_trace()该方法不适用于 Heroku,因为您无权访问连接到您的应用程序的控制台,但显然您可以使用rpdb https://pypi.python.org/pypi/rpdb/,pdb 的“远程”版本。

所以我安装了rpdb,添加了import rpdb; rpdb.set_trace()在适当的地点。当我发出命中 rpdb 行的请求时,应用程序按预期挂起,并且我在 heroku 日志中看到以下内容:

pdb is running on 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc:4444

好的,那么如何连接到正在运行的 pdb?我试过了heroku run nc 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc 4444尝试从 heroku 系统内连接到指定主机,但会立即退出并显示状态 1 并且没有错误消息。

所以我的具体问题是:我现在如何连接到这个远程 pdb?

一般相关的问题是:这对于 Heroku 上运行的应用程序的这种交互式调试来说是正确的方法吗?有没有更好的办法?

注意芹菜:注意,我现在也尝试了与芹菜类似的方法,但无济于事。默认主机celery的rdb(远程pdb包装器)使用的是localhost,当它是 Heroku 时你无法访问它。我尝试过使用CELERY_RDB_HOST将环境变量添加到 Heroku 上托管的网站的域,但这会出现“无法分配请求的地址”错误。所以这是相同的基本问题——如何连接到 Heroku 上运行的远程 pdb 实例?


在回答你的第二个问题时,我根据错误类型(浏览器端、后端或视图)采取不同的做法。对于后端和视图测试(单元测试),这样的东西适合您吗?

$ heroku run --app=your-app "python manage.py shell --settings=settings.production"

然后在 ipython 中进行调试:

>>> %run -d script_to_run_unittests.py

即使您没有运行 django 应用程序,您也可以将调试器作为 ipython 的命令行选项运行,这样任何 python 错误都会将您带到调试器:

$ heroku run --app=your-app "ipython --pdb"

前端测试是一个完全不同的领域,您应该研究像 selenium 这样的工具。我认为还有一个“沙拉”测试套件模块,可以使前端测试更容易编写。编写一个中断的测试是调试的第一步(至少有人告诉我;)。

如果错误看起来很简单,您可以随时执行旧的“打印并运行”操作,例如

import logging
logger = logging.getLogger(__file__)
logger.warn('here be bugs')`

并使用 getsentry.com 或等效的监控工具查看您的日志文件,或者只是:

heroku logs --tail
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用远程 pdb 连接调试在 Heroku 上运行的 Django 应用程序? 的相关文章

  • sphinx 中的分组方法文档字符串

    是否可以使用 sphinx 的 autodoc 功能将多个方法文档字符串分组 以便将它们列在一起 class Test object def a self A method of group foo def b self A method
  • 修复类以在 Flask 会话中启用对象存储[重复]

    这个问题在这里已经有答案了 我有一个自定义类 Passport 其中包含活动用户身份和权限 我曾经将它存储在会话中 如下所示 p Passport p do something fancy session passport p 它就奏效了
  • Highcharts 奇怪的分组行为

    我正在使用延迟加载 http www highcharts com stock demo lazy loading加载 OHLC 数据的方法 在服务器端 我使用 Python MySQL 并有 4 个包含 OHLC 数据的表 时间间隔为 5
  • (Django) AJAX 请求的 CSRF 验证在 Chrome 中工作,但在 Firefox 中不起作用

    正如标题所述 我的 Django CSRF 验证在 Chrome 中有效 但在 Firefox 中无效 我想知道原因 以便解决此问题 我已将此包含在head我的标签基本 html我的应用程序中的所有其他文件都从中扩展的文件 base htm
  • 比较两个文本文件并计算差异

    我一直在尝试在Python中比较两个文本文件 本质上我想打开它们并一次比较一个字符 如果字符不同 则向计数器添加1 然后显示该值 这是我到目前为止所拥有的 usr bin env python diff 0 import random im
  • 来自数据框 groupby 的条形图

    import pandas as pd import numpy as np import matplotlib pyplot as plt df pd read csv arrests csv df df replace np nan 0
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 获取 HTML 代码的结构

    我正在使用 BeautifulSoup4 我很好奇是否有一个函数可以返回 HTML 代码的结构 有序标签 这是一个例子 h1 Simple example h1 p This is a simple example of html page
  • Microsoft Azure 数据仓库和 SqlAlchemy

    我正在尝试使用 python 的 sqlalchemy 库连接到 microsoft azure 数据仓库 并收到以下错误 pyodbc Error HY000 HY000 Microsoft ODBC SQL Server Driver
  • 如何将 pip 指向 Mercurial 分支?

    我正在尝试通过 pip 将我的应用程序安装到 virtualenv 进行测试 安装时效果很好default or tip像这样 pip install e hg https email protected cdn cgi l email p
  • Bottle 是否可以处理没有并发的请求?

    起初 我认为 Bottle 会并发处理请求 所以我编写了如下测试代码 import json from bottle import Bottle run request response get post import time app B
  • 使用 .map() 在 pandas DataFrame 中高效创建附加列

    我正在分析形状与以下示例类似的数据集 我有两种不同类型的数据 abc数据和xyz data abc1 abc2 abc3 xyz1 xyz2 xyz3 0 1 2 2 2 1 2 1 2 1 1 2 1 1 2 2 2 1 2 2 2 3
  • 当我打印“查询”时获取 PY_VAR1

    我正在制作一个简单的网络抓取代码 当我尝试打印一个值时 它给了我其他东西 def PeopleSearch query SearchTerm query what is query print str query SearchTerm St
  • Python `concurrent.futures`:根据完成顺序迭代 future

    我想要类似的东西executor map 除了当我迭代结果时 我想根据完成的顺序迭代它们 例如首先完成的工作项应该首先出现在迭代中 等等 这样 当且仅当序列中的每个工作项尚未完成时 迭代就会阻塞 我知道如何使用队列自己实现这一点 但我想知道
  • Python:使用for循环更改变量后缀

    我知道这个问题被问了很多 但到目前为止我无法使用 理解答案 我想改变for循环中变量的后缀 我尝试了 stackoverflow 搜索提供的所有答案 但很难理解提问者经常提出的具体代码 因此 为了清楚起见 我使用一个简单的示例 这并不意味着
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • Matplotlib 渲染日期、图像的问题

    我在使用 conda forge 的 Matplotlib v 3 1 3 和 python 3 7 时遇到问题 我拥有 Matplotlib 所需的所有依赖项 当我输入这段代码时 它应该可以工作 我得到了泼溅艺术 它基于此 YouTube
  • 使用 Python 进行 Google 搜索网页抓取 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近为了工作中的一些项目 学习了很多python 目前我需要使用谷歌搜索结果进行一些网络抓取 我发现几
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节

随机推荐