Initially I had a Django app with the included testing server. To debug this setup, I can just add a import pdb; pdb.set_trace()
anywhere in the code and have a breaking point that throws me into an interactive debugger in Terminal (on command-line).
Recently I shifted to gunicorn to gain some perf benifits. How can I get a similar behavior while using this Gunicorn setup. I have tried by setting gunicorn settings with debug=True
and daemon=False
but it does not work.
Anyone has a solution to this?
I managed now to use gunicron with djnago and ipdb.
run
python -m ipdb manage.py run_gunicorn --debug -t 3600
I'm using Django 1.4 and gunicorn 0.16.1. then you can normally use the
import ipdb; ipdb.set_trace()
in the code. There is no need for thewerkzeug
library.I'm trying to debug a facebook app, so I can't use the build in development server, because facebook tries to use SSL and the dev server just can't respond properly
While I was looking for a solution, I found a post pdb: Using the Python debugger in Django that suggests to run
python -m pdb manage.py runserver
all the time. Although this is not necessary with django's dev server, I decided to give it a try with gunicordn and ipdb and it worked.To run green unicorn in a reverse proxy configuration (under nginx) in a debugger / debug mode, enter the following settings in PyCharm's Run / Django / Edit configurations:
Of course, use whatever port (instead of
7777
) you have configured your nginx to proxy to.Ok I've recently stumbed upon similar problem. I wasn't able to apply @dudklein solution (I get I/O Errors while debugger was trying to take input - ipdb, pdb etc.)
I used remote python debbuger - winpdb and it's embedded debugging.
install winpdb in Your virtualenv
import and run embedded debugger in Your code:
run gunicorn with --timeout argument
run proper view using browser eg.
http://127.0.0.1:8000/your-view/
connect to embedded debugger using winpdb:
It will prompt You for a password (use one You set in Your code, in my example it is 'pass') and run nice GUI with debugger.
if You need tutorial for
winpdb
- here You are.If you are able to launch gunicorn pointing at an
application
instance that is an instance of theDebuggedApplication
class from thewerkzeug
library, you will be able to set break points using the werkzeug debugger withimport ipdb; ipdb.set_trace()
right in your browser.Make sure you install werkzeug library and ipdb of course. (
pip install werkzeug
andpip install ipdb
)What I finally ended up doing is run
python manage.py runserver <your_external_IP>:8000
when I want to usepdb
.So you need to have 2 different repositories in the same machine, one being LIVE production build (the one running
gunicorn
) and the other being the TEST build, the one I need to debug on where I usepdb
. When things seem stable on TEST build I merge theTEST branch
withLIVE branch
. No development or changes happen onLIVE branch
that way I avoid merge conflicts.Hopefully this helps others who are addicted to
pdb
;)