Команды отладки Pycharm manage.py в docker compose - PullRequest
0 голосов
/ 23 сентября 2018

У меня довольно простая настройка.Я использую Pycharm 2018.2.3 и использую docker compose для ускорения 3-х контейнеров.

  1. Мое приложение Django
  2. NGINX для обслуживания статических
  3. Postgres DB

Я настроил удаленный интерпретатор для отладки контейнера, и точки останова работают очень хорошо в большинстве случаев, по крайней мере, когда я пересекаю свои конечные точки API или выполняю какие-либо другие действия в приложении django.

Что не работает, так это когда я запускаю одну из моих пользовательских команд manage.py.До сих пор я пробовал это двумя способами.

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

  2. Я вошел вКонтейнер, запустите команду manage.py напрямую через командную строку и выполните ее в контейнере, но опять-таки без точек останова.

Документация, кажется, работает в обычном случае, но яне могу найти никакой помощи для отладки этих команд в контейнере.

Спасибо за любую помощь или советы.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Просто обновление на случай, если кто-нибудь столкнется с подобной проблемой.Моим личным решением было не использовать команды manage.py, а вместо этого сделать те же самые команды доступными через вызов http.

Я обнаружил, что проще (и часто даже полезнее) просто иметь такую ​​конечную точку, какmyserver.com/api/do-admin-function и ограничьте его административным доступом.

Когда я ставлю точку останова в своем коде, даже если он работает в контейнере, он ломается нормально, как и ожидалось, и позволяет мне отлаживатьтак, как я хотел бы

0 голосов
/ 23 сентября 2018

Может зависеть от вашего docker-compose.yml точного содержимого.

См., Например, раздел " Интерактивный отладчик внутри работающего контейнера! " статьи« Простой рецепт развития Django в Docker (Бонус: тестирование с Selenium) » от Адам Кинг .

Его docker-compose.ym l включает в себя:

version: "2"
services:
  django:
    container_name: django_server
    build:
      context: .
      dockerfile: Dockerfile
    image: docker_tutorial_django
    stdin_open: true
    tty: true
    volumes:
      - .:/var/www/myproject
    ports:
      - "8000:8000"

В нем см .:

stdin_open: true
tty: true

[Эти 2 строки] важны, потому что они позволяют нам запускать интерактивный терминал.
Нажмите ctrl - c , чтобы убить сервер, работающий на вашем терминале, а затем переведите его в фоновый режим с помощью docker-compose up -d.
docker ps сообщает намон все еще работает:

Нам нужно присоединиться к этому запущенному контейнеру, чтобы увидеть выходные данные его сервера и точки останова pdb.
Команда docker attach django_server отобразит пустую строку, но если вы обновитеваш веб-браузер, вы увидите вывод сервера.
Drop import pdb; pdb.set_trace() в вашем коде, и вы получите интерактивный отладчик, простоАйк, к которому ты привык.

...