【问题标题】:Django / psycopg2 / postgresql probably broken models give useless stack traceDjango / psycopg2 / postgresql 可能损坏的模型给出了无用的堆栈跟踪
【发布时间】:2011-02-26 17:57:59
【问题描述】:

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

正在发生的事情是这样的。我正在使用一个调用 python-openid 的各种机制的视图,这些机制依赖于我输入的模型。在那里的某个地方,有些东西正在破坏。我的问题不是 为什么 它坏了,而是我无法告诉 什么 坏了。我的模型是直接针对他们的实现 cmets 编写的,但我可能犯了一两个错误。

这是堆栈跟踪:

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 Internal Server Error 和 apache 错误日志中的堆栈跟踪。还有什么地方可以看吗?一些我可以制定的选项或一些我可以用来观察执行或其他东西的奇妙工具?

【问题讨论】:

    标签: python django postgresql stack-trace


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊啊啊。现在这是一个好主意,希望能帮助我解决问题所在。谢谢。
    • 你终于找到问题了吗?我们使用 django-social-auth 随机出现此错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2011-11-25
    • 2013-06-26
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多