最初,我有一个包含测试服务器的 Django 应用程序。要调试此设置,我可以import pdb; pdb.set_trace()
在代码中的任何位置添加一个断点,并在终端(在命令行上)中将我放入交互式调试器中。
最近我转向 gunicorn 以获得一些性能优势。使用此 Gunicorn 设置时如何获得类似的行为。我已经尝试通过设置 gunicorn 设置,debug=True
但daemon=False
它不起作用。
有人对此有解决方案吗?
要在调试器/调试模式下以反向代理配置(在 nginx 下)运行绿色独角兽,请在PyCharm的 Run / Django / Edit 配置中输入以下设置:
当然,使用7777
您已将 nginx 配置为代理的任何端口(而不是 )。
好的,我最近偶然发现了类似的问题。我无法应用@dudklein 解决方案(调试器尝试获取输入时出现 I/O 错误 - ipdb、pdb 等)
我使用了远程 python debbuger- winpdb,它是嵌入式调试。
在您的 virtualenv 中安装 winpdb
pip install winpdb
在您的代码中导入并运行嵌入式调试器:
import rpdb2
rpdb2.start_embedded_debugger('pass')
使用 --timeout 参数运行 gunicorn
gunicorn -t 3600 env:application
使用浏览器运行正确的视图,例如。http://127.0.0.1:8000/your-view/
使用 winpdb 连接到嵌入式调试器:
winpdb -a /path/to/django/app/views.py
它会提示您输入密码(使用您在代码中设置的密码,在我的示例中为“pass”)并使用调试器运行漂亮的 GUI。
如果你需要教程winpdb
-你在这里。
如果您能够启动 gunicorn 指向一个application
实例,该实例是库中DebuggedApplication
类的实例,您将能够在浏览器中werkzeug
使用 werkzeug 调试器设置断点。import ipdb; ipdb.set_trace()
import django.core.handlers.wsgi
from werkzeug.debug import DebuggedApplication
application = django.core.handlers.wsgi.WSGIHandler()
application = DebuggedApplication(application, evalex=True)
当然,请确保安装 werkzeug 库和 ipdb。(pip install werkzeug
和pip install ipdb
)
我现在设法将 gunicron 与 djnago 和 ipdb 一起使用。
跑python -m ipdb manage.py run_gunicorn --debug -t 3600
我正在使用 Django 1.4 和 gunicorn 0.16.1。那么你就可以正常import ipdb; ipdb.set_trace()
在代码中使用了。不需要werkzeug
图书馆。
我正在尝试调试 facebook 应用程序,因此我无法使用内置开发服务器,因为 facebook 尝试使用 SSL,而开发服务器无法正确响应
在寻找解决方案时,我发现了一篇pdb: Using the Python debugger in Django,它建议一直运行python -m pdb manage.py runserver
。虽然这对于 django 的开发服务器不是必需的,但我决定尝试使用 gunicordn 和 ipdb 并且它有效。
我最终做的是python manage.py runserver <your_external_IP>:8000
在我想使用时运行pdb
.
因此,您需要在同一台机器上拥有 2 个不同的存储库,一个是 LIVE 生产版本(一个正在运行gunicorn
),另一个是 TEST 版本,我需要在我使用的地方进行调试pdb
。当 TEST 构建上的事情看起来稳定时,我将TEST branch
与LIVE branch
. LIVE branch
避免合并冲突的方式不会发生任何开发或更改。
希望这可以帮助其他上瘾的人pdb
;)