2014-07-18 30 views
0

我的迁移到hrd不适用于appspot.com。应用程序数据存储在原始主/从(MS)和高复制数据存储(hrd)中都有3种“数据类型”:Group,引脚和日志。每个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

下面是用于添加保存Pin如果母公司是Group我的Python代码。

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(地图)功能。

我很抱歉这里的噪音。这个问题是由于我尝试作为javascript/html模板中的解决方法而尝试使用try..catch模式而导致无法使用/无法使用的。

编辑#1

+0

这可能更适合于App Engine生产许可证,以便有人可以挖掘数据。我建议在这里提交一个错误:https://code.google.com/p/googleappengine/issues/entry?template=Production%20issue –

+0

它不是一个错误。在迁移指南中详细记录了手动保存的id不会迁移,因为所有id将在hdr中更改。 –

+0

关于我使用的过程,“手动保存”是什么?我使用了appengine自动化过程(正如我们在此讨论的那样)[http://stackoverflow.com/questions/24768891/]。 – zerowords

回答

1

编码的钥匙串有望改变。编码版本包含应用程序的Id。在迁移过程中,密钥将使用新的应用程序ID重新编写。对键的引用也被类似地更新。

如果将密钥存储为db.ReferenceProperty,则在迁移过程中会自动更新密钥。

但是如果你存储串像

ahNzaW1wbGlmeWNvbm5lY3Rpb25zchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM

在db.StringProperty()(或其他类似的方式,如URL的一部分),那么他们将不会更新一个你需要更新自己为described in the docs

Pin引用的模型似乎并未链接到其他实体,因此应该没有任何问题。