Как отлаживать приложение Django, работающее на Heroku, используя удаленное соединение pdb? - программирование
Подтвердить что ты не робот

Как отлаживать приложение Django, работающее на Heroku, используя удаленное соединение pdb?

Чтобы отладить ошибку, которую я вижу на Heroku, но не на моей локальной машине, я пытаюсь выполнить сквозную отладку.

Типичный подход import pdb; pdb.set_trace() не работает с Heroku, поскольку у вас нет доступа к консоли, подключенной к вашему приложению, но, видимо, вы можете использовать rpdb, a "remote" версия pdb.

Итак, я установил rpdb, добавил import rpdb; rpdb.set_trace() в соответствующее место. Когда я делаю запрос, который попадает на строку rpdb, приложение зависает, как ожидалось, и я вижу следующее в моем журнале heroku:

pdb is running on 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc:4444

Итак, как подключиться к pdb, который работает? Я пробовал heroku run nc 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc 4444, чтобы попытаться подключиться к именованному узлу из системы heroku, но сразу же выходит из состояния 1 и не появляется сообщение об ошибке.

Итак, мой конкретный вопрос: как мне теперь подключиться к этому удаленному pdb?

Общий связанный вопрос: это даже правильный способ для такой интерактивной отладки приложения, работающего на Heroku? Есть ли способ лучше?

ПРИМЕЧАНИЕ RE CELERY: Заметьте, я также попробовал аналогичный подход с Celery, но безуспешно. Используемый по умолчанию массив сельдерей rdb (удаленная оболочка pdb) использует localhost, к которому вы не можете добраться, когда это Heroku. Я попытался использовать переменную среды CELERY_RDB_HOST в домене веб-сайта, размещенного на Heroku, но это дает ошибку "Невозможно присвоить запрошенный адрес". Итак, это та же самая основная проблема - как подключиться к удаленному экземпляру pdb, который работает на Heroku?

4b9b3361

Ответ 1

В ответ на ваш второй вопрос я делаю это по-разному в зависимости от типа ошибки (браузер, сторона или вид). Для тестирования бэкэнда и просмотра (unittests) вам понравится эта работа?

$ heroku run --app=your-app "python manage.py shell --settings=settings.production"

Затем отладка в ipython:

>>> %run -d script_to_run_unittests.py

Даже если вы не используете приложение django, вы можете просто запустить отладчик в качестве параметра командной строки для ipython, чтобы любые ошибки python отбросили вас в отладчик:

$ heroku run --app=your-app "ipython --pdb"

Передние испытания - это совершенно другая игра с мячом, где вы должны смотреть на инструменты, такие как селен. Я думаю, что там также есть модуль набора салатов, который упрощает запись тестов на лицевой панели. Написание теста, который ломается, является первым шагом в отладке (или так мне говорят;).

Если ошибка выглядит просто, вы всегда можете выполнить старую "печать и запуск" с чем-то вроде

import logging
logger = logging.getLogger(__file__)
logger.warn('here be bugs')`

и просмотрите свои файлы журналов с помощью getentry.com или эквивалентного средства мониторинга или просто:

heroku logs --tail