2010-04-30 7 views
17

Je suis nouveau à Django. Je pense que je fais une simple erreur.PyDev et Django: comment redémarrer le serveur de développement?

J'ai lancé le serveur dev avec Pydev:

RCliquez sur le projet >> Django >> personnalisée commande >> runserver

Le serveur est venu, et tout était super. Mais maintenant j'essaye de l'arrêter, et je n'arrive pas à comprendre comment. J'ai arrêté le processus dans la console PyDev, et fermé Eclipse, mais les pages Web sont toujours desservies à partir de http://127.0.0.1:8000.

j'ai lancé et quitté le serveur à partir de la ligne de commande normalement:

python manage.py runserver 

Mais le serveur est toujours en place. Qu'est-ce que je fais mal ici?

Répondre

4

Je l'exécute généralement depuis la console. Exécuter à partir de PyDev ajoute une confusion inutile, et n'apporte aucun avantage jusqu'à ce que vous utilisiez le débogage interactif GUI de PyDev.

2

Solution: créez une erreur d'interprète dans un fichier de projet. Cela provoquera le blocage du serveur. Le serveur peut ensuite être redémarré normalement.

+0

Je me demande si vous pouvez appeler cela une solution élégante. C'est simple, et ça fonctionne. – Udi

14

Par défaut, la commande runserver s'exécute en mode de chargement automatique, qui s'exécute dans un processus séparé. Cela signifie que PyDev ne sait pas comment l'arrêter et n'affiche pas sa sortie dans la fenêtre de la console.

Si vous exécutez la commande runserver --noreload à la place, le rechargement automatique sera désactivé. Ensuite, vous pouvez voir la sortie de la console et arrêter le serveur normalement. Toutefois, cela signifie que les modifications apportées à vos fichiers Python ne seront pas effectives tant que vous n'aurez pas redémarré manuellement le serveur.

3

Edit: Les dernières versions de PyDev (depuis PyDev 3.4.1) ne nécessite pas solution de contournement:

ie: PyDev va bien tuer sous-processus sur une opération de processus de tuer et lors du débogage, même avec le rechargement régulier, PyDev attachera le débogueur aux processus fils.


Vieille réponse (pour les versions PyDev plus que 3.4.1):

Malheureusement, ce qui est attendu, comme PyDev simplement tuer le processus parent (ex: comme si au lieu de ctrl + C vous tuez processus parent dans le gestionnaire de tâches).

La solution serait d'éditer Django lui-même afin que le processus fils interroge le processus parent pour savoir qu'il est encore vivant et quitter si ce n'est pas le cas ... voir: How to make child process die after parent exits? pour référence. Après un rapide coup d'oeil, il semble lié à django/utils/autoreload.py et la façon dont il démarre les choses - donc, il serait nécessaire de démarrer un thread qui continue à voir si le parent est vivant et s'il ne l'est pas, il tue le processus enfant - J'ai signalé cela comme un bug dans Django Remarque: en guise de solution de rechange pour PyDev, vous pouvez faire en sorte que Django alloue une nouvelle console (hors PyDev) tout en continuant à partir de PyDev (ainsi, jusqu'à ce qu'une solution appropriée soit disponible depuis Django, le patch ci-dessous peut être utilisé pour que le chargement automatique de Django alloue une nouvelle console - où vous pouvez utiliser correctement Ctrl + C).

Index: django/utils/autoreload.py 
=================================================================== 
--- django/utils/autoreload.py (revision 16923) 
+++ django/utils/autoreload.py (working copy) 
@@ -98,11 +98,14 @@ 
def restart_with_reloader(): 
    while True: 
     args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv 
-  if sys.platform == "win32": 
-   args = ['"%s"' % arg for arg in args] 
     new_environ = os.environ.copy() 
     new_environ["RUN_MAIN"] = 'true' 
-  exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ) 
+ 
+  import subprocess 
+  popen = subprocess.Popen(args, env=new_environ, creationflags=subprocess.CREATE_NEW_CONSOLE) 
+  exit_code = popen.wait() 
     if exit_code != 3: 
      return exit_code 
1

Si vous utilisez Windows en utilisant le CMD: Quittez le serveur avec CTRL +PAUSE.

python manage.py runserver localhost:8000 
5

Exécutez le projet 1. Faites un clic droit sur le projet (non sous-dossiers) 2. Exécuter en tant que> Pydev: Django

Terminate 1. Cliquez dans la fenêtre de fin console

Le serveur est en baisse

+0

Cela fonctionne, bien que "Terminer" soit la case rouge à droite, puis vous devez redémarrer le serveur pour voir les changements. –

+0

Excellente solution, et si cela ne fonctionne pas, essayez de redémarrer l'ordinateur/Eclipse et assurez-vous de ne démarrer le serveur que de cette manière. Mélanger cela avec des commandes personnalisées "runserver" peut empêcher le serveur d'être arrêté correctement. – ecoe

0

vous pouvez quitter en cliquant sur Ctrl + Pause touches. Notez que la touche Pause peut être appelée Break et dans certains ordinateurs portables, elle est faite en utilisant la combinaison Fn + F12. J'espère que cela pourrait aider.

Questions connexes