Подтвердить что ты не робот

PyDev и Django: как перезапустить dev-сервер?

Я новичок в Django. Я думаю, что делаю простую ошибку.

Я запустил dev-сервер с Pydev:

RClick в проекте → Django → Custom команда → runningerver

Сервер подошел, и все было здорово. Но теперь я пытаюсь остановить это и не могу понять, как это сделать. Я остановил процесс в консоли PyDev и закрыл Eclipse, но веб-страницы все еще обслуживаются от http://127.0.0.1:8000,

Я запустил и выхожу из командной строки из командной строки:

python manage.py runserver

Но сервер все еще работает. Что я здесь делаю неправильно?

4b9b3361

Ответ 1

По умолчанию команда runerver запускается в режиме автозагрузки, который выполняется в отдельном процессе. Это означает, что PyDev не знает, как остановить его, и не отображает его вывод в окне консоли.

Если вы запустите команду runserver --noreload вместо этого, автоматический перезагрузчик будет отключен. Затем вы можете увидеть вывод консоли и нормально остановить сервер. Однако это означает, что изменения в ваших файлах Python не будут эффективны, пока вы не перезапустите сервер вручную.

Ответ 2

Запустите проект 1. Щелкните правой кнопкой мыши проект (не вложенные папки) 2. Запустите "Как > Pydev: Django

Завершение 1. Нажмите кнопку завершения в окне консоли

Сервер отключен

Ответ 3

Я обычно запускаю его с консоли. Запуск из PyDev добавляет излишнюю путаницу и не приносит никакой пользы, пока вы не будете использовать интерактивную отладку GUI PyDev.

Ответ 4

Изменить: последние версии PyDev (начиная с PyDev 3.4.1) больше не нуждаются в обходном пути:

i.e: PyDev будет правильно убивать подпроцессы в процессе процесса уничтожения, а при отладке даже при регулярной перезагрузке PyDev присоединяет отладчик к дочерним процессам.


Старый ответ (для версий PyDev старше 3.4.1):

К сожалению, это ожидалось, поскольку PyDev просто убьет родительский процесс (то есть, как если бы вместо ctrl + C вы убили родительский процесс в диспетчере задач).

Решением будет редактирование самого Django, чтобы дочерний процесс опросил родительский процесс, чтобы узнать, что он все еще жив, и выйдите, если он не... см.: Как заставить дочерний процесс умереть после того, как родительские выходы? для справки.

После быстрого просмотра кажется, что это связано с django/utils/autoreload.py и тем, как он запускает вещи - поэтому нужно было бы начать поток, который будет видеть, жив ли родитель, и если он не он убивает дочерний процесс - я сообщил об этом как об ошибке в самом Django: https://code.djangoproject.com/ticket/16982

Примечание. В качестве обходного пути для PyDev вы можете сделать Django выделенной новой консолью (из PyDev), все еще запущенной из PyDev (поэтому, пока подходящее решение не будет доступно из Django, патч ниже может быть использован для создания Django autoreload выделяет новую консоль - где вы можете правильно использовать 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

Ответ 5

Решение: создайте ошибку интерпретатора в каком-либо файле проекта. Это приведет к сбою сервера. Затем сервер можно перезапустить как обычно.

Ответ 6

Если вы работаете с Windows с помощью CMD: закройте сервер с помощью CTRL + BREAK.

python manage.py runserver localhost:8000

Ответ 7

вы можете выйти, нажав клавиши Ctrl + Pause. Обратите внимание, что клавишу Pause можно назвать Break, а на некоторых ноутбуках она производится с использованием комбинации Fn + F12. Надеюсь, это может помочь.