I had a hard time getting the Django debug toolbar to work this morning. Complicating factor: the site runs inside a vagrant virtualbox and my browser is simply running inside OSX.
(I use vagrant and virtualbox, see why I use vagrant and my vagrant setup on OSX)
Ok, I thought I had installed everything correctly. What can be the problem? I checked and double checked. The best way to verify your settings is to use django’s own “diffsettings” management command, that way you’re sure you’re looking at the right settings:
$ bin/django diffsettings
...
DEBUG = True
INSTALLED_APPS = ['debug_toolbar', 'lizard5_site', ... ]
INTERNAL_IPS = ('33.33.33.20', '127.0.0.1', '0.0.0.0')
...
MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...)
...
Debug mode is on, it is in the INSTALLED_APPS
and I’ve correctly enabled
the middleware. Oh, and I’ve adjusted the INTERNAL_IPS
setting.
127.0.0.1
even though I don’t really talk to the site from within my vagrant
box.
0.0.0.0
as that’s what I start my runserver with inside vagrant
(bin/django runserver 0.0.0.0:8000
): listen on everything on port 8000.
33.33.33.20
as that’s the default IP address that vagrant/virtualbox
gives me to talk to the virtualbox from within OSX. So on my laptop you’ll
normally see http://33.33.33.20:8000/
instead of
http://localhost:8000/
:-)
The 0.0.0.0
shouldn’t be needed, but at that time I was just trying things
out to no avail.
… Time to call in the artillery. We have the source code, so I looked up the
debug toolbar version I was using and put an import pdb;pdb.set_trace()
into the def show_toolbar(request)
method inside
debug_toolbar/middleware.py
.
The first lines of that short function are:
if request.META.get('REMOTE_ADDR', None) not in settings.INTERNAL_IPS:
return False
In went the pdb and I reloaded the homepage:
> /.../django_debug_toolbar-1.0.1-py2.7.egg/debug_toolbar/middleware.py(26)show_toolbar()
-> if request.META.get('REMOTE_ADDR', None) not in settings.INTERNAL_IPS:
(Pdb) request.META['REMOTE_ADDR']
'33.33.33.1'
Sure enough, the error was in my INTERNAL_IPS
setting after all.
REMOTE_ADDR
on the request turned out to be 33.33.33.1
! Even though I
talk to it from OSX with 33.33.33.20
. So there must be some internal
virtualbox/vagrant trickery that does some mapping here.
So: if you use the django debug toolbar inside vagrant: make sure you’ve got
the correct port in the INTERNAL_IPS
setting!
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):