我迁移到hrd无法在appspot.com上运行。应用程序数据存储区在原始主/从(MS)和高复制数据存储区(hrd)中都有3种“数据类型”:Group
,Pin和Log。每个Group
实体都有Pin实体和/或与之关联的Log实体,但这些关联不再适用于hrd(迁移后仍然存在),因此我的应用程序不再有效,我正在寻求帮助恢复它。
下面我将报告数据存储区中前两个Pin
实体的实体密钥。我已经在每对的较短的键中插入了一些空格,以便于排列键以查看它们的相似之处。请注意,所有键的开头和结尾都相似,但MS与hrd不同。
Decoded entity key: Group: name=250cc > Pin: id=1
Entity #1 MS key: ah NzaW1wbGlmeWNvbm5lY3Rpb25zchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM
Entity #1 hrd key: ahlzfnNpbXBsaWZ5Y29ubmVjdGlvbnMtaHJkchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM
Decoded entity key: Group: name=250cc > Pin: id=5001
Entity #2 MS key: ah NzaW1wbGlmeWNvbm5lY3Rpb25zchoLEgVHcm91cCIFMjUwY2MMCxIDUGluGIknDA
Entity #2 hrd key: ahlzfnNpbXBsaWZ5Y29ubmVjdGlvbnMtaHJkchoLEgVHcm91cCIFMjUwY2MMCxIDUGluGIknDA
To view the app yourself使用此链接。您将看到名为“Playground”的Group
并查看其在URL中的调用方式。但是,出现的唯一标记(映射引脚)是自迁移到hrd后添加的标记。
编辑#0
以下是我的Python代码,用于添加保存Pin
,其中父级为Group
。
elif action == "add":
pin = Pin(parent=place)
pin.name = self.request.get('details')
pin.lat = float(self.request.get('lat'))
pin.lng = float(self.request.get('lng'))
pin.category = int(self.request.get('category'))
pin.label = self.request.get('label')
new_id = pin.put()
self.response.out.write(new_id)
以下是Pin
的类定义。
class Pin(db.Model):
date = db.DateTimeProperty(auto_now_add=True)
lat = db.FloatProperty()
lng = db.FloatProperty()
name = db.StringProperty()
cornerColor = db.StringProperty(default='ffffff')
height = db.IntegerProperty(default=32)
label = db.StringProperty(default='')
labelColor = db.StringProperty(default='000000')
labelSize = db.IntegerProperty(default=2)
primaryColor = db.StringProperty(default='ff0000')
shadowColor = db.StringProperty(default='000000')
shape = db.StringProperty(default='circle')
strokeColor = db.StringProperty(default='000000')
width = db.IntegerProperty(default=32)
category = db.IntegerProperty(default=0)
scategory = db.StringProperty()
logindex = db.IntegerProperty(default=0)
imageindex = db.IntegerProperty(default=0)
deleteRequested = db.BooleanProperty(default=False)
编辑#0
编辑#1
毕竟,我的应用程序的问题不在于实体密钥。相反,问题在于我尝试在javascript / html中处理另一个关于风格化标记的已弃用的Google(地图)功能。
我很抱歉这里有噪音。这个问题是由于我无法使用try..catch模式而无法/无效,我尝试将其用作javascript / html模板中的变通方法。
编辑#1
答案 0 :(得分:1)
预计编码的密钥字符串会发生变化。编码版本包含应用程序的ID。在迁移过程中,使用新的应用程序ID重写密钥。对密钥的引用也同样更新。
如果将密钥存储为db.ReferenceProperty,则在迁移过程中会自动为您更新密钥。
但是如果你要存储像
这样的字符串ahNzaW1wbGlmeWNvbm5lY3Rpb25zchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM
在db.StringProperty()中(或其他类似方式,例如URL的一部分),然后它们将不会更新,您需要自己更新为described in the docs。
您为Pin引用的模型似乎并未链接到其他实体,因此不会出现任何问题。