Gunicorn Джанго Отладки


Изначально у меня было приложение Django с включенным тестовым сервером. Чтобы отладить эту настройку, я могу просто добавить import pdb; pdb.set_trace() в любом месте кода и иметь точку разрыва, которая бросает меня в интерактивный отладчик в терминале (в командной строке).

Недавно я перешел на gunicorn, чтобы получить некоторые преимущества perf. Как я могу получить подобное поведение при использовании этой установки Gunicorn? Я попытался установить настройки gunicorn с помощью debug=True и daemon=False, но это не работает.

У кого-нибудь есть решение, чтобы вот это?

5 8

5 ответов:

Чтобы запустить green unicorn в конфигурации обратного прокси (под nginx) в режиме отладчика / отладки, введите следующие настройки в PyCharm 's Run / Django / Edit configuration:

Конечно, используйте любой порт (вместо 7777), на который вы настроили прокси-сервер nginx.

Скриншот

Хорошо, я недавно столкнулся с подобной проблемой. Я не смог применить решение @dudklein (я получаю ошибки ввода-вывода, когда отладчик пытается принять входные данные-ipdb, pdb и т. д.)

Я использовал удаленный Python debbuger - winpdb и это встроенная отладка.

  1. Установите winpdb в virtualenv

    pip install winpdb
    
  2. Импорт и запуск встроенного отладчика в коде:

    import rpdb2
    rpdb2.start_embedded_debugger('pass')
    
  3. Запустите gunicorn с -- timeout аргумент

    gunicorn -t 3600 env:application
    
  4. Запустите правильный просмотр с помощью браузера, например. http://127.0.0.1:8000/your-view/

  5. Подключение к встроенному отладчику с помощью winpdb:

    winpdb -a /path/to/django/app/views.py
    

    Он предложит вам ввести пароль (используйте тот, который вы установили в своем коде, в моем примере это "pass") и запустить хороший графический интерфейс с отладчиком.

  6. Если вам нужен учебник для winpdb - Вот вы где .

Введите описание изображения здесь

Если вы можете запустить gunicorn, указывая на экземпляр application, который является экземпляром класса DebuggedApplication из библиотеки werkzeug, Вы сможете установить точки останова с помощью отладчика werkzeug с помощью import ipdb; ipdb.set_trace() прямо в вашем браузере.

import django.core.handlers.wsgi
from werkzeug.debug import DebuggedApplication

application = django.core.handlers.wsgi.WSGIHandler()
application = DebuggedApplication(application, evalex=True)

Убедитесь, что вы установили библиотеку werkzeug и ipdb, конечно. (pip install werkzeug и pip install ipdb)

Теперь мне удалось использовать gunicron с djnago и ipdb.

Выполнить python -m ipdb manage.py run_gunicorn --debug -t 3600

Я использую Django 1.4 и gunicorn 0.16.1. тогда вы можете нормально использовать import ipdb; ipdb.set_trace() в коде. Нет необходимости в библиотеке werkzeug.

{Facebook пытается отладить приложение facebook, поэтому я не могу использовать build in development server, потому что facebook пытается использовать SSL, а dev-сервер просто не может ответить должным образом

Пока я искал решение, я нашел сообщение pdb: Using the Python debugger в Django , который предлагает запускать python -m pdb manage.py runserver все время. Хотя в этом нет необходимости с dev-сервером django, я решил попробовать его с gunicordn и ipdb, и это сработало.

Что я в конце концов сделал, так это запустил python manage.py runserver <your_external_IP>:8000, когда я хочу использовать pdb.

Таким образом, вам нужно иметь 2 разных репозитория в одной машине, один из которых является LIVE production build (один работает gunicorn), а другой-тестовая сборка, которую мне нужно отладить там, где я использую pdb. Когда на тестовой сборке все кажется стабильным, я объединяю TEST branch с LIVE branch. Никакое развитие или изменения не происходят на LIVE branch таким образом, я избегаю конфликтов слияния.

Надеюсь, это поможет другим, кто зависим от pdb ;)