我正在使用Eclipse + PyDev在Mac上为GAE-Python 2.7开发,自从SDK 1.7.6(引入新的dev_appserver)以来,我有一个“DuplicatePropertyError”4次中有4次(在执行第一个请求时的平均值)。此外,即使第一个请求正常,错误也可能出现在以后的请求中。
这个错误只发生在开发中(在生产中一切都很顺利),在1.7.6之前,我从未有过这个错误。
我没有过多关注这个问题,因为到目前为止,我正在使用old_dev_appserver以便能够继续调试我的应用程序(Google在新版本中使用stdin / stdout for ipc打破了对pydevd的支持开发服务器)。但是,由于旧的开发服务器将从7月1日起被删除,我认为是时候开始使用新服务器: - )。
还有其他人遇到过这个问题吗?任何解决方案/解决方法?
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 515, in __init__
_initialize_properties(cls, name, bases, dct)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 430, in _initialize_properties
attr.__property_config__(model_class, attr_name)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 3686, in __property_config__
self.collection_name))
DuplicatePropertyError: Class Organization already has property wagesheetrow_set
INFO 2013-06-07 15:13:54,864 server.py:585] default: "GET / HTTP/1.1" 500 -
答案 0 :(得分:4)
想出来了!显然,在创建ReferenceProperty时会出现错误,而不会给它一个明确的collection_name。
例如,这可能会触发错误:
class WageSheetRow(db.Model):
organization = db.ReferenceProperty(Organization)
这是正确的方法:
class WageSheetRow(db.Model):
organization = db.ReferenceProperty(Organization, collection_name='aName')
以前从未发生旧服务器,但显然,新服务器(1.7.6+)已经改变了初始化实例的方式。
还要提到的是,完全相同的代码可能会在一台特定的机器中触发错误,而在另一台机器上运行完全相同的代码则不会。