2012-03-22 57 views
2

我遇到了一个错误,我无法找到根本原因。错误如下:“ReferenceProperty未能解决:[u'StatusLog',STATUSLOGSID]”。这种错误有时会发生,大约每天一次或两次。产生这种错误的脚本比失败的脚本更成功。关于错误的最奇怪的事情是它无法解析引用属性,而不应该是这种情况(就这种情况而言),因为被引用的实体永远不会被我的webapp删除。此外,我不会生成Google App Engine正在引用的密钥。下面列出了相关的代码。ReferenceProperty未能解决 - App Engine

的GAE交易:

def updateStatus(key): 
    hbo = HBO.get(key) 
    hbo.updateStatus() 
    hbo.put() 

class HBOCRON(webapp2.RequestHandler): 
    def get(self): 
     keys = db.Query(HBO, keys_only = True).filter("inactive = ", False) 
     XG_ON = db.create_transaction_options(xg=True) 
     for key in keys: db.run_in_transaction_options(XG_ON, updateStatus, key) 

app = webapp2.WSGIApplication([('/cron/hbo', HBOCRON)],debug=True) 

两个其他相关功能...

def logStatus(self): 
    self.status = StatusLog(
     hbo = self, 
     prev = self.status, 
     date = datetime.datetime.now(), 
     on = self.online(), 
     up = self.upToDate(), 
     dns = self.DNS_update_needed, 
     dis = self.manually_disabled).put() 

def updateStatus(self): 
    status = self.status 
    if status is None \ 
     or status.on != self.online() \ 
     or status.up != self.upToDate() \ 
     or status.dns != self.DNS_update_needed: 
     self.logStatus() 
     self.flagged = True 
    elif status.dis != self.manually_disabled: 
     self.logStatus() 

回溯:

ReferenceProperty failed to be resolved: [u'StatusLog', 248327L] 
Traceback (most recent call last): 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~hs-hbo/1.357660268729453201/api/hbo/getCheckin.py", line 88, in post 
    (hbo, data) = db.run_in_transaction_options(XG_ON, checkinTransaction, self.request) 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/datastore.py", line 2476, in RunInTransactionOptions 
    ok, result = _DoOneTry(new_connection, function, args, kwargs) 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/datastore.py", line 2498, in _DoOneTry 
    result = function(*args, **kwargs) 
    File "/base/data/home/apps/s~hs-hbo/1.357660268729453201/api/hbo/getCheckin.py", line 33, in checkinTransaction 
    hbo.updateStatus() 
    File "/base/data/home/apps/s~hs-hbo/1.357660268729453201/shared/datastore.py", line 116, in updateStatus 
    return self.logStatus() 
    File "/base/data/home/apps/s~hs-hbo/1.357660268729453201/shared/datastore.py", line 102, in logStatus 
    prev = self.status, 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 3597, in __get__ 
    reference_id.to_path()) 
ReferencePropertyResolveError: ReferenceProperty failed to be resolved: [u'StatusLog', 248327L] 

感谢您的任何见解/帮助/答案/建议!

+1

请提供来自日志和实际取消引用的ReferenceProperty的代码片段的追溯 – 2012-03-23 03:48:00

+0

I已经添加了完整的追溯到我的SO帖子。感谢您创建这样一个美妙的脚本语言a nd在Python社区中处于活跃状态。 – 2012-03-23 16:36:27

回答

2

出现这种情况,当你尝试解决参考属性(通过取消引用它 - 例如,(MyModel.MyReferenceProp.foo),以及被引用的属性不再存在 - 因为它已被删除

您需要修改代码才能解决引用可能已被删除的实体并对其进行适当处理的异常。

+0

嗨,尼克,感谢您回复我的文章。我知道当你试图解析一个引用属性时会发生这种情况;然而,我的同事和我从不删除任何StatusLog实体。因此,我们很好奇,在被删除的实体从未被修改或删除时,它如何解析引用属性失败。 – 2012-03-23 16:40:38

+1

@JustinPapez在这种情况下,你应该捕捉异常,并检查有问题的实体,看看有什么不对。 – 2012-03-24 07:58:03

+0

是的,这就是我们目前所做的;但它似乎有点“骇人听闻”。它也发生在同一类别的不同实体上。谢谢你的帮助。 – 2012-03-24 19:35:04

相关问题