Невозможно подключиться к контейнеризованному веб-серверу Django во время сеанса удаленной отладки Pycharm - PullRequest
0 голосов
/ 09 января 2019

У меня есть приложение Django, работающее в конфигурации Docker-compose, и я хотел бы иметь возможность интерактивно отлаживать его с Pycharm. Сначала я попытался и не смог настроить отладку, используя встроенную в Pycharm конфигурацию Docker Compose (результат: приложение работает и доступно, но отладка недоступна, я подозреваю, что из-за известной ошибки, при которой отладчику не удается подключиться, если сценарий точки входа занимает слишком много времени, чтобы вернуть ). Сейчас я пытаюсь настроить отладку с помощью удаленной отладки с помощью pydevd, примерно следуя инструкциям , содержащимся здесь и приведенным ниже:

  • Добавление конфигурации запуска удаленного отладчика Python в Pycharm
  • В моем приложении Django скопируйте pycharm-debug-py3k.egg в корневой каталог, добавьте его в путь, импортируйте pydevd и инициализируйте его в коде моего приложения следующим образом:

    import sys sys.path.append("pycharm-debug-py3k.egg") import pydevd pydevd.settrace('ip.address.of.my.machine', port=4444)

  • Запустить отладчик в Pycharm

  • Запустите мое приложение с docker-compose up
  • Нажмите кнопку воспроизведения / возобновления программы в отладчике

Результатом этого является то, что в Pycharm консоль отладчика сообщает, что соединение активно («Подключено к отладчику pydev»). На вкладке отладчика показаны ожидаемые переменные и значения, присутствующие в файле, к которому я добавил фрагмент кода. Нет ошибок в журналах контейнеров для моего приложения Django, и журнал показывает ожидаемый результат для обычного запуска Django. Однако мое приложение недоступно из веб-браузера, и попытка запустить модульные тесты в контейнере зависает без ответа. После прерывания модульных тестов клавиатурой я получаю трассировку стека с таким сообщением внизу:

   File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1392, in _locked_settrace
     time.sleep(0.1)  # busy wait until we receive run command
 KeyboardInterrupt

Я удалил все точки останова, удалил .idea, перезапустил Pycharm, перезапустил Docker и подтвердил, что, если я удалю фрагмент кода pydevd, все модульные тесты и функция веб-сервера будут работать как положено.

1 Ответ

0 голосов
/ 09 января 2019

Я разработал ответ, как только отправил сообщение - я добавил фрагмент кода в неправильный файл. Когда я добавил его в __init__.py моего корневого приложения и перезапустил сервер отладки, он заработал, как и ожидалось, сломав там, где я отметил точки останова в Pycharm (по крайней мере, при доступе через веб-браузер все еще не радует выполнение юнит-тестов) .

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