如何使用远程 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 应用程序? 的相关文章

随机推荐