【发布时间】:2011-10-27 12:27:12
【问题描述】:
我们在 Apache 实例中运行基于 django 的应用程序的两个副本。从数据库加载对象时,我们有这个 python 代码:
id = pymongo.objectid.ObjectId(hex_string)
d = self.collection.find_one({ '_id': id })
assert id == d['_id']
在两个应用程序之一(无论我们点击第二个)上,断言失败。我们查看了 ID,它们是相同的。另外,当我们将其更改为:
assert str(id) == str(d['_id'])
断言通过。在我们的开发机器(Win 7 64 位,django dev server 而不是 Apache)上,这似乎工作正常。
堆栈:Ubuntu 10.04 LTS、Apache 2.2.14、Python 2.6.5、MongoDB 2.0、Pymongo 2.0.1
更新:我们遇到了另一个类似的问题。我们实际上开始将对象称为 BSON 对象 ID,这解决了第二个问题。但是,即使使用 BSON 对象 ID,这个问题中的问题仍然存在。
【问题讨论】:
-
当您看到这种行为时,apache error_log 文件中是否有任何错误?
-
我在
error_log中看到的唯一意想不到的事情(除了我们正在修复的DeprecationWarnings,是:TemplateDoesNotExist: 500.html -
尝试记录“d['_id']”和“id”的类型。这些是什么?价值观是什么?
-
如果我能弄清楚如何做到这一点,我会尝试记录它们。我可以告诉你,我们已经在 django 中对失败的实例打开了调试,并查看了我们返回的 500 响应。它们都代表自己,例如,
ObjectId('47283de8cf9cc30d000000')Plus,完全相同的代码适用于其他应用程序。我将编辑问题以澄清该混淆因素。
标签: django apache mongodb pymongo