2014-07-18 2 views
0

hsp 로의 마이 그 레이션이 appspot.com에서 작동하지 않습니다. 앱 데이터 저장소에는 원래 마스터/슬레이브 (MS)와 높은 복제 데이터 스토어 (hrd)에 모두 3 종류의 데이터가 있습니다 (Group, 핀 및 로그). 각 Group 엔티티는 Pin 엔티티 및/또는 로그 엔티티와 연관되어 있지만 연관성은 hrd에서 더 이상 작동하지 않으므로 (마이그레이션에서 유지되는 모든 것), 내 앱이 더 이상 작동하지 않으며이를 복구하는 데 도움이 필요합니다.높은 복제 데이터 저장소로 마이그레이션 한 후 엔터티 키가 다릅니다

아래 데이터 스토어의 처음 두 Pin 엔티티에 대한 엔티티 키를보고합니다. 각 쌍의 짧은 키에 몇 개의 공백을 삽입하여 키를 정렬하여 유사점을 확인했습니다. 모든 키가 비슷하게 시작되고 끝나지만 MS vs 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

다음은 부모가 GroupPin을 저장 추가 내 파이썬 코드입니다.

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

내 응용 프로그램의 문제는 결국, 엔티티 키가 아닙니다. 대신, 문제는 내 자바 스크립트/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 자동화 프로세스를 사용했습니다 (SO에서 여기서 논의했듯이) [http://stackoverflow.com/questions/24768891/]. – zerowords

답변

1

편집 #. 인코딩 된 버전에는 응용 프로그램의 ID가 들어 있습니다. 마이그레이션 프로세스 중에 키는 새 응용 프로그램 ID로 다시 작성됩니다. 키에 대한 참조도 비슷하게 업데이트됩니다.

키를 db.ReferenceProperty로 저장하면 마이그레이션 중에 키가 자동으로 업데이트됩니다. 그러나

당신이 ahNzaW1wbGlmeWNvbm5lY3Rpb25zchkLEgVHcm91cCIFMjUwY2MMCxIDUGluGAEM

같은 문자열을 저장하는 경우

가 이 db.StringProperty() (또는 그러한 URL의 일부로서 다른 유사한 방법 등)에 대한

, 그들은이되지 않습니다 업데이 트가 자신을 업데이 트해야 described in the docs.

Pin 용으로 참조하는 모델은 다른 엔티티에 연결되지 않아 문제가 없어야합니다.

관련 문제