2010-04-30 15 views
17

Soy nuevo en Django. Creo que estoy cometiendo un simple error.PyDev y Django: ¿cómo reiniciar el servidor de desarrollo?

que puso en marcha el servidor de dev con PyDev:

RHaga clic en proyecto >> >> Django personalizada comando de ejecución del servidor >>

El servidor se acercó, y todo fue genial. Pero ahora estoy tratando de detenerlo, y no puedo entender cómo. Paré el proceso en la consola de PyDev y cerré Eclipse, pero las páginas web aún se están atendiendo desde http://127.0.0.1:8000.

puse en marcha y salir del servidor desde la línea de comandos normalmente:

python manage.py runserver 

Pero el servidor está todavía. ¿Qué estoy haciendo mal aquí?

Respuesta

4

Normalmente lo ejecuto desde la consola. Ejecutar desde PyDev agrega confusión innecesaria y no aporta ningún beneficio hasta que utilice la depuración interactiva de GUI de PyDev.

2

Solución: cree un error de intérprete en algún archivo de proyecto. Esto causará que el servidor falle. El servidor puede reiniciarse normalmente.

+0

Me pregunto si puede llamar a esto una solución elegante. Es simple, y funciona. – Udi

14

De forma predeterminada, el comando runserver se ejecuta en modo de carga automática, que se ejecuta en un proceso separado. Esto significa que PyDev no sabe cómo detenerlo, y no muestra su salida en la ventana de la consola.

Si ejecuta el comando runserver --noreload, se deshabilitará el recargador automático. Luego puede ver la salida de la consola y detener el servidor normalmente. Sin embargo, esto significa que los cambios en sus archivos Python no serán efectivos hasta que reinicie el servidor manualmente.

3

Editar: Últimas versiones PyDev (desde PyDev 3.4.1) ya no necesita ninguna solución:

es decir: PyDev matará correctamente subprocesos en una operación de proceso de matanza y al depurar incluso con regularidad recarga de, PyDev adjuntará el depurador de los procesos secundarios.


respuesta Viejo (para las versiones mayores de PyDev 3.4.1):

Por desgracia, eso es lo esperado, ya que PyDev simplemente matar el proceso padre (es decir: como si en lugar de Ctrl + C matan a los proceso principal en el administrador de tareas).

La solución sería editar Django para que el proceso hijo sondee el proceso principal para saber que todavía está vivo y salir si no ... ver: How to make child process die after parent exits? para referencia.

Después de un rápido vistazo parece estar relacionado con django/utils/autoreload.py y la forma en que inicia las cosas, por lo tanto, sería necesario iniciar un hilo que siga viendo si el padre está vivo y si no es que mata el proceso secundario, lo he reportado como un error en Django sí: https://code.djangoproject.com/ticket/16982

Nota: como una solución para PyDev, puede que Django asignar una nueva consola (de PyDev) al mismo tiempo que va desde PyDev (así, hasta que una solución adecuada está disponible de Django, el parche a continuación se pueden utilizado para hacer que la autorecarga de Django asigne una nueva consola, donde puede usar correctamente 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 opera en Windows usando el CMD: Salir del servidor con CTRL +PAUSA.

python manage.py runserver localhost:8000 
5

Ejecutar el proyecto 1. Haga clic con el botón derecho en el proyecto (no subcarpetas) 2. Ejecutar como> PyDev: Django

Terminar 1. Haga clic en la ventana de la consola terminar

el servidor no funciona

+0

Esto funciona, aunque "Terminate" es el cuadro rojo a la derecha, y luego debe reiniciar el servidor para ver los cambios. –

+0

Gran solución, y si no funciona, intente reiniciar la computadora/eclipse y asegúrese de que solo inicie el servidor de esta manera. Mezclar esto con los comandos personalizados "runserver" puede evitar que el servidor se cierre correctamente. – ecoe

0

puede salir haciendo clic en Ctrl + Pause teclas. Tenga en cuenta que la tecla Pausa se puede llamar Break y en algunos equipos portátiles está hecha usando la combinación Fn + . Espero que esto pueda ayudar.

Cuestiones relacionadas