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

2024-10-03 09:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

为了调试我在Heroku上看到的一个bug,而不是在我的本地计算机上,我正在尝试逐步调试。在

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

{cddb>安装在适当的位置。当我发出一个命中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上托管的网站的域,但这会出现“cannotassignrequestedaddress”错误。所以这是相同的基本问题——如何连接到运行在Heroku上的远程pdb实例?在


Tags: 方法import应用程序heroku远程计算机错误bug
2条回答

为了回答您的第二个问题,我会根据错误的类型(浏览器端、后端或视图)进行不同的操作。对于后端和视图测试(unittests),类似这样的东西对您有用吗?在

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

然后在ipython中调试:

^{pr2}$

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

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

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

如果bug看起来很简单,您可以使用类似的方法来执行旧的“打印并运行”

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

并使用getsentry.com网站或同等的监控工具,或只是:

heroku logs  tail

相关问题 更多 >