Debugging remote dev server
Posted on Thu 06 March 2014 in posts
Allow runserver to accept requests from any address
By default, the runserver command will not accept outside connections.
python manage.py runserver 127.0.0.0:8000
This will only accept connections from 127.0.0.0, if you are connected to a remote server and not using port forwarding, then your address will not be recognized. To fix the issue, use:
python manage.py runserver 0.0.0.0:8000
Extend the INTERNAL_IPS Setting
When DEBUG = True, if your ip address is something other than 127.0.0.1 then you still will not be able to view the site in debug mode. To fix this, you must add your ip address that you are accessing the server from to the list of internal ips. Since your local ip address will change constantly, it is easier to wildcard it with your local network addresses. Wildcarding is not supported by the INTERNAL_IPS setting so it must be extended in your settings.py file.
if DEBUG:
from fnmatch import fnmatch
class glob_list(list):
def __contains__(self, key):
for elt in self:
if fnmatch(key, elt): return True
return False
INTERNAL_IPS = glob_list(['127.0.0.1', '192.168.*.*'])
This will give you the ability to debug a remote dev server. However, you probably don't want to have that mess in your settings.py file. A better solution is to make a local_settings.py file that will be ignored by source control.
Extend the settings file to import a local_settings.py
In settings.py
try:
from local_settings import *
except ImportError:
pass
Create a local_settings.py and move the code from above to extend internal ips into it, this time, you can remove the if DEBUG: statement if you will never have DEBUG = False on your dev server
from fnmatch import fnmatch
class glob_list(list):
def __contains__(self, key):
for elt in self:
if fnmatch(key, elt): return True
return False
INTERNAL_IPS = glob_list(['127.0.0.1', '192.168.*.*'])