Отладка Django Gunicorn

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

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

У кого-нибудь есть решение?


person Srikar Appalaraju    schedule 03.11.2012    source источник
comment
Вы узнали, как заставить его работать?   -  person duduklein    schedule 14.12.2012
comment
да, пожалуйста, прочитайте мой ответ. это то, что я делаю сейчас...   -  person Srikar Appalaraju    schedule 14.12.2012
comment
Мне удалось использовать gunicorn и ipdb вместе. см. мой ответ ниже. Я также предлагаю установить большее значение времени ожидания, чтобы у вас было время на отладку.   -  person duduklein    schedule 15.12.2012
comment
Почему вы не приняли свой собственный ответ?   -  person Brian Peterson    schedule 28.09.2013


Ответы (5)


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

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

Снимок экрана

person Kimvais    schedule 19.06.2013
comment
что с помощью графического интерфейса для python: D? - person holms; 01.06.2015
comment
Это не очень помогает. op хочет использовать pdb, а не графический интерфейс PyCharm для отладки. - person WhyNotHugo; 04.04.2017

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

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

  1. установить winpdb в свой виртуальный сервер

    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 - здесь.

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

person lechup    schedule 16.04.2014

Если вы сможете запустить 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)

person Calvin Cheng    schedule 03.11.2012
comment
@calvin-cheng: Не знаю, как это должно работать. Сначала я должен получить необработанное исключение, чтобы отладчик трассировки Werzeug стал видимым в пользовательском интерфейсе (то есть в веб-браузере). Это работает. Из них в командной строке пользовательского интерфейса я вызываю import ipdb; ipdb.set_trace(). Это вызывает исключение, мне кажется, что ipdb не нравится его консоль (похоже, это какой-то класс HTML *, который не звучит совершенно неправильно, когда он должен работать в браузере.) - person Uwe Geuder; 31.05.2013

Теперь мне удалось использовать 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 пытается использовать SSL, а сервер разработки просто не может правильно ответить

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

person duduklein    schedule 14.12.2012

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

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

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

person Srikar Appalaraju    schedule 14.12.2012
comment
На самом деле это НЕ работает, если у вас есть обратный прокси https (например, nginx) - person Kimvais; 19.06.2013
comment
@Kimvais да, ты прав. если вы знаете, как это сделать при наличии обратного HTTP-прокси, мне интересно узнать о настройке... - person Srikar Appalaraju; 19.06.2013
comment
Я знаю только, как это сделать в PyCharm, поместите сообщение в качестве ответа - person Kimvais; 19.06.2013