2014-07-18 28 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引用的模型似乎並未鏈接到其他實體,因此應該沒有任何問題。