Чтобы отладить ошибку, которую я вижу на Heroku, но не на моем локальном компьютере, я пытаюсь выполнить пошаговую отладку.
Типичный подход import pdb; pdb.set_trace()
не работает с Heroku, поскольку у вас нет доступа к консоли, подключенной к вашему приложению, но, очевидно, вы можете использовать rpdb, "удаленная" версия 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?