Чтобы отладить ошибку, которую я вижу на 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?