【发布时间】:2014-12-04 01:59:41
【问题描述】:
将我的 Django 1.6 应用程序升级到 Django 1.7 后,我在从 PostgreSQL 获取数据时开始出现随机错误:
DatabaseError: server sent data ("D" message) without prior row description ("T" message)
lost synchronization with server: got message type "�", length -1244613424
DatabaseError: lost synchronization with server: got message type "0", length 842674226
ProgrammingError: no results to fetch
ValueError: invalid literal for int() with base 10: 'feuj3f47jvsdv7tgnj43g63j'
当我在浏览器中快速打开 10 个选项卡时,一半的选项卡正常加载,其中一半出现 DB 错误。当我刷新发生错误的选项卡时,它们会正常加载。
我是通过uwsgi和nginx运行Django,psycopg2的版本是2.5.4。
总体而言,与 Postgres 的通信似乎完全中断,不同查询的结果混合在一起。
编辑:
经过几个小时的故障排除后,我发现了以下问题:
Django 1.6 + uwsgi - 工作
Django 1.7 + gunicorn - 工作
Django 1.7 + uwsgi - 不起作用,引发数据库错误。所以问题似乎出在 uwsgi 和 Django 1.7 的组合上。这很奇怪,我有另一个 Django 1.7 项目运行在具有相同 uwsgi 的同一台服务器上,它没有任何问题。
有什么想法吗?
(我真的不介意切换到 gunicorn,可能不得不走这条路,但为什么会发生这种情况仍然很有趣)
更新 2:仔细检查显示 Django 内部发生了完全疯狂的事情,例如模型的主键被当前用户的 session_id 替换(这是“invalid literal for int() with base 10”错误的来源)和 Django 向DB“忘记”指定 WHERE 子句。我可能会称之为某种内存损坏。
更新 3:我们从 uwsgi 切换到 gunicorn,问题现在消失了。一切都很好。不过,我可能仍在寻找合适的解决方案。
【问题讨论】:
-
libpq与psycopg2不匹配?无论如何,它在psycopg2或libpq中是低级的。 -
我的旧(Django 1.6 生产)和新(Django 1.7 开发)安装共享同一台服务器,所以我看不出
lipbq会出现问题,而其他则不会跨度> -
但是你是对的,可能
psycopg2在编译时配置错误,我需要检查一下 -
好吧,看起来问题出在 Django 本身,请参阅更新。
-
只是为了偏执:你确定你运行的不是超级旧的破 uWSGI 版本吗? (像任何东西
标签: django postgresql uwsgi psycopg2 django-1.7