2012-09-20 10 views
12

Ich habe vor kurzem daran gewöhnt, die folgenden in meinem django Projekte tun, damit ich bowser Kompatibilität zu verschiedenen OS testen können (dh nicht-linux):Django runserver Fehler beim Anschluss Angabe

$ sudo ./manage.py runserver 0.0.0.0:80 

Dies erlaubt mir zu Greifen Sie über einen beliebigen Computer im Netzwerk auf das Projekt zu.

Allerdings habe ich Setup nur eine neue Maschine und dieser Befehl gibt die folgende Fehlermeldung:

Ich verstehe, dass django Schwierigkeiten hat, das Modul zu finden, was ich nicht verstehe, ist, dass das gute alte:

$ sudo ./manage.py runserver 

läuft gut. Alles, was ich hier mache, ist der Wechsel des Hafens, sicher? Und natürlich hat es in der Vergangenheit gut funktioniert.

N.B.
1. Ich verwende Django 1.4
2. Ich habe versucht innerhalb eines virtualenv und auf System und ich bekomme das gleiche Ergebnis.
3. Ich habe keine Django installiert systemweit (nur in virtualenvs)

Jede Hilfe würde sehr geschätzt werden.

+0

ich nicht genau wissen, warum das nicht funktioniert. Funktioniert es, wenn Sie './manage.py runserver 0.0.0.0: 8000' laufen lassen (dh auf einem Port> 1024 ohne sudo) – Eli

+0

bekomme ich den gleichen Fehler auf System, und der folgende Fehler in virtualenv:' Fehler: Sie don Ich habe keine Erlaubnis, auf diesen Port zuzugreifen. –

+0

Funktioniert es, wenn Sie es explizit mit Python aufrufen: 'python manage.py runserver 0.0.0.0: 8000' –

Antwort

18

Ich denke, der sudo-Befehl wird den Prozess in dem Super-User-Kontext ausführen, und die Superuser Kontext fehlt virtualenv Einstellungen.

Sie können versuchen, die Python binär an Ihrem virtualenv zum Beispiel explizit zu nennen:

sudo $(which python) manage.py runserver 0.0.0.0:80 

ein Shell-Skript Machen Sie das virtualenv zu setzen und stattdessen manage.py runserver, dann sudo dieses Skript aufrufen.

#!/bin/bash 
source /home/darwin/.virtualenvs/foo/bin/activate 
cd /path/to/project/foo 
python manage.py runserver 0.0.0.0:80 

ersetzen /home/darwin/.virtualenvs/foo mit der Wurzel Ihrer tatsächlichen virtualenv und /path/to/project/foo mit der Wurzel des Projektes.

+0

Beachten Sie, dass die Verwendung von sudo NICHT den Python Ihrer lokalen Umgebung verwendet, sondern den Standard Ihres Systems Python (Sie können Ihre erforderlichen Pakete vermissen) –

+1

@RishabhAgrahari in der Tat, Antwort aktualisiert –

0

Run
manage.py runserver 0.0.0.0:8000
dh. Führen Sie den Server in anderen Port und nicht den Standard-Port 80
während die URL die Portnummer

6

Hier ist eine andere Lösung verwenden zugreifen, anstatt Shell-Skript zu erstellen, nur festlegen, welche Python-Executable Sie in dem Befehl verwendet werden soll:

Unter der Annahme, dass Ihr virtualenv Behälter .virtualenvs genannt wird und es gibt eine env myproject darin genannt wird, ist dieser Befehl Sie schreiben müssen:

$ sudo ~/.virtualenvs/myproject/bin/python manage.py runserver 0.0.0.0:80