Django / psycopg2 / postgresql可能破坏了模型给无用的堆栈跟踪

时间:2011-02-26 17:58:00

标签: python django postgresql stack-trace

我正在努力将OpenID与我自己的Django认证Stack集成。我正在使用python-openid,django 1.2.5和postgresql,遵循examples/下的djopenid文件夹中的示例

这是怎么回事。我正在使用一个调用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 transaction management并且在这个过程的某个地方,我正在做某些导致数据库的完整性问题。但它并没有告诉我可能是什么,或者我的代码中的错误在哪里。我在settings.py中尝试了turning this off,看看是否会产生更合理的堆栈跟踪。它没有。

我的问题非常简单:我如何找出问题所在?我可以从一个有问题的SQL语句向后工作(因为这将告诉我哪些模型失败)或甚至更好的涉及我的一些代码的堆栈跟踪。甚至“postgresql错误代码XYZ”给了我一些谷歌。是否有一些我可以打开的设置让django更健谈?我正在使用

DEBUG = True
TEMPLATE_DEBUG = DEBUG

显然,我甚至没有得到黄色的错误页面。只是你的普通旧500内部服务器错误和apache错误日志中的堆栈跟踪。还有其他地方我可以看看吗?我可以制定一些选项或者我可以用来观察执行的一些奇怪的工具吗?

1 个答案:

答案 0 :(得分:3)

在某个端口上通过manage.py运行它,在您的视图中调用 ipdb.set_trace()并逐步跟踪它 - 就像在任何其他调试过程中一样。

此外,您可以使用built-in python/django logging features并将我们的内容打印到日志文件中。

查看here了解更多提示 - 或许其中一些对您有用。