【问题标题】:What can cause this difference between prod and dev?什么会导致 prod 和 dev 之间的这种差异?
【发布时间】:2012-06-30 17:54:35
【问题描述】:

相同的代码,在生产中不能在开发中工作。

型号:

class Comput(ndb.Model):
    @staticmethod
    def membership(user):
        q = ndb.gql("SELECT * FROM Members WHERE member = :1", user)
        result = q.fetch()
        return [m.comput.get() for m in result]
        #return [m.comput.get() for m in q] #same issue (dev yes, prod no)

class Members(ndb.Model):
    comput = ndb.KeyProperty(kind=Comput)
    member = ndb.UserProperty()

处理程序:

comput_list = Comput.membership(users.get_current_user())

模板:

{% for comput in comput_list %}
    <tr onclick="location.href='/comput?id={$ comput.key.id() $}'">

回溯(仅在生产中):

UndefinedError: 'None' has no attribute 'key'

即使comput_list 有实体也会出现。

更新:没有为会员自动生成索引,我尝试手动添加但没有任何变化

【问题讨论】:

  • 只是为了确定:哪个代码行会引发错误?您在生产中的表中有数据吗?
  • 该行是&lt;tr onclick...。我确定数据在表格中。
  • 似乎 comput_list 返回None。无论如何,我希望空模板,没有错误
  • 是的,这是我的猜测,也是我询问生产数据的原因。

标签: google-app-engine python-2.7 jinja2 app-engine-ndb


【解决方案1】:

看起来您的Members 对象之一的comput 属性为None。我会使用生产数据查看器(或添加日志语句)来查找它是哪个成员。

【讨论】:

  • 是的!删除 Compute 实体的函数不会删除引用的 Members 实体。然后我有一个带有计算属性的成员实体,该属性链接到丢失的计算实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2021-08-08
相关资源
最近更新 更多