PyDev и Django: как перезапустить сервер Dev? - PullRequest
17 голосов
/ 30 апреля 2010

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

Я запустил сервер разработки с Pydev:

RЩелкните по проекту >> Django >> Custom команда >> runserver

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

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

python manage.py runserver

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

Ответы [ 7 ]

14 голосов
/ 30 апреля 2010

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

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

5 голосов
/ 06 апреля 2013

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

Завершить 1. Нажмите «Завершить» в окне консоли

Сервер не работает

4 голосов
/ 30 апреля 2010

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

3 голосов
/ 04 октября 2011

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

Т.е.: 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 выделяет новую консоль - где вы можете правильно использовать 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
2 голосов
/ 30 апреля 2010

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

1 голос
/ 22 апреля 2012

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

python manage.py runserver localhost:8000
0 голосов
/ 21 декабря 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...