最初,我有一个包含测试服务器的Django应用程序。要调试此设置,我只需在代码中的任何位置添加import pdb; pdb.set_trace()
,并有一个断点,将我引入终端中的交互式调试器(在命令行上)。
最近我转移到了gunicorn以获得一些优势。使用此Gunicorn设置时,如何获得类似的行为。我尝试过用debug=True
和daemon=False
设置gunicorn设置,但它不起作用。
任何人都有解决方案吗?
答案 0 :(得分:3)
要在调试器/调试模式下以反向代理配置(在nginx下)运行绿色独角兽,请在PyCharm的运行/ Django /编辑配置中输入以下设置:
当然,使用您已配置nginx代理的任何端口(而不是7777
)。
答案 1 :(得分:3)
好的,我最近似乎遇到了类似的问题。我无法应用@dudklein解决方案(我在调试器试图接受输入时得到I / O错误 - ipdb,pdb等。)
我使用了远程python debbuger - winpdb及其embedded debugging。
在你的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
它会提示您输入密码(使用您在代码中设置的密码,在我的示例中它是'传递')并使用调试器运行良好的GUI。
如果您需要winpdb
- here You are的教程。
答案 2 :(得分:2)
如果您能够从application
库启动指向DebuggedApplication
类werkzeug
类实例的gunicorn,您将能够使用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
)
答案 3 :(得分:2)
我现在设法使用gunnron与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的dev服务器没有必要这样做,但我决定尝试使用gunicordn和ipdb,并且它有效。
答案 4 :(得分:0)
当我想使用python manage.py runserver <your_external_IP>:8000
时,我最终做的是运行pdb
。
所以你需要在同一台机器上有两个不同的存储库,一个是LIVE生产版本(一个运行gunicorn
),另一个是TEST版本,我需要在我使用的地方进行调试{ {1}}。当TEST构建中的事情看起来稳定时,我将pdb
与TEST branch
合并。 LIVE branch
没有任何开发或更改发生,我避免了合并冲突。
希望这可以帮助那些沉迷于LIVE branch
;)