Django / psycopg2 / postgresql, вероятно, сломанные модели дают бесполезную трассировку стека - PullRequest
0 голосов
/ 26 февраля 2011

Я работаю над интеграцией OpenID с моим собственным стеком аутентификации для Django.Я использую python-openid, django 1.2.5 с postgresql, следуя примерам из папки djopenid в examples/

Что происходит, так это.Я использую представление, которое вызывает различные механизмы python-openid, которые полагаются на модели, которые я использовал. Где-то там что-то ломается.Моя проблема не в , почему она сломана, а в том, что я не могу сказать , что сломано.Мои модели написаны непосредственно против их комментариев реализации, но я, вероятно, допустил одну или две ошибки.

Это трассировка стека:

mod_wsgi (pid=5476): Exception occurred processing WSGI script 
'/var/www/Django/Testbed/Testbed.wsgi'., referer: 
http://localhost/testbed/openidlogin
 Traceback (most recent call last):, referer: 
http://localhost/testbed/openidlogin
   File "/usr/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 
252, in __call__, referer: http://localhost/testbed/openidlogin
     response = middleware_method(request, response), referer: 
http://localhost/testbed/openidlogin
   File 
"/usr/lib/python2.7/site-packages/django/contrib/sessions/middleware.py", line 
36, in process_response, referer: http://localhost/testbed/openidlogin
     request.session.save(), referer: http://localhost/testbed/openidlogin
   File 
"/usr/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py", line 
61, in save, referer: http://localhost/testbed/openidlogin
     sid = transaction.savepoint(using=using), referer: 
http://localhost/testbed/openidlogin
   File "/usr/lib/python2.7/site-packages/django/db/transaction.py", line 229, 
in savepoint, referer: http://localhost/testbed/openidlogin
     connection._savepoint(sid), referer: http://localhost/testbed/openidlogin
   File "/usr/lib/python2.7/site-packages/django/db/backends/__init__.py", line 
56, in _savepoint, referer: http://localhost/testbed/openidlogin
     self.cursor().execute(self.ops.savepoint_create_sql(sid)), referer: 
http://localhost/testbed/openidlogin
   File "/usr/lib/python2.7/site-packages/django/db/backends/util.py", line 15, 
in execute, referer: http://localhost/testbed/openidlogin
     return self.cursor.execute(sql, params), referer: 
http://localhost/testbed/openidlogin
   File 
"/usr/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py
", line 44, in execute, referer: http://localhost/testbed/openidlogin
     return self.cursor.execute(query, args), referer: 
http://localhost/testbed/openidlogin
 DatabaseError: current transaction is aborted, commands ignored until end of 
transaction block, referer: http://localhost/testbed/openidlogin

Так что я понимаю, что django использует управление транзакциями postgresql и что где-то в этом процессе я делаю что-то , которое вызывает проблему целостности с базой данных.Но это не говорит мне, что это может быть, или где ошибка в моем коде.Я попытался отключить это в settings.py, чтобы увидеть, приведет ли более разумная трассировка стека.Это не так.

Мой вопрос очень прост: как узнать, в чем проблема?Я могу работать в обратном направлении из-за неправильного оператора SQL (так как это скажет мне, какие модели не работают) или даже лучше - трассировка стека, включающая часть моего кода.Даже "postgresql error code XYZ" дает мне кое-что для Google.Могу ли я включить некоторые настройки, которые делают django более разговорчивым?Я использую

DEBUG = True
TEMPLATE_DEBUG = DEBUG

Очевидно, но я даже не получаю желтую страницу с ошибкой.Просто ваша старая ошибка 500 Internal Server Error и эта трассировка стека в журнале ошибок apache.Где-нибудь еще я могу посмотреть?Какой-нибудь вариант, который я могу использовать, или какой-нибудь изумительный инструмент, который я могу использовать для наблюдения за выполнением или что-то в этом роде?

1 Ответ

3 голосов
/ 26 февраля 2011

Запустите его через manage.py на каком-либо порту, поместите ipdb.set_trace () вызов в вашем представлении и отслеживайте его шаг за шагом - как в любом другом процессе отладки.Вы можете использовать встроенные функции ведения журналов python / django и просто распечатать наш материал в файл журнала.

Смотрите здесь для получения дополнительных советов - возможно, некоторые из нихбыть полезным для вас.

...