2011-05-19 100 views
14

Google App Engine具有應用程序版本的概念。即,您可以同時運行多個版本的應用,並可以在不同的子域中訪問。例如:http://1.my-app-name.appspot.com,http://2.my-app-name.appspot.comGoogle App Engine數據存儲中的版本控制

這個應用程序的哪些方面實際上是「版本化」的?它只是Python +靜態文件的代碼庫嗎?數據存儲是否具有「版本」的概念?如果不是,那麼當我更新Google App Engine模型的定義時會發生什麼?

謝謝!

回答

25

正確,應用版本只涉及您上傳的文件。兩個版本都使用相同的數據存儲。

請注意,數據存儲本身是無模式的。每個實體都是鍵/值對的獨立集合。兩個相同類型的實體不必共享同一組屬性或屬性類型。 db.Model提供了圍繞數據存儲的ORM抽象,但沒有定義或實施任何種類的全局模式。

datastore沒有版本化,它支持namespacing。如果你想爲你的應用程序的每個主要版本,新的數據存儲段,你可以這樣做:

import os 
from google.appengine.api import namespace_manager 

namespace_manager.set_namespace(os.environ['CURRENT_VERSION_ID']) 
+4

可能應該拆分版本字符串並根據主要版本值創建名稱空間。 'major_ver,minor_ver = os.environ.get('CURRENT_VERSION_ID')。rsplit('。',1); namespace_manager.set_namespace(major_ver)'即使不更改主版本值,次版本值也隨每個部署而改變。 – Calvin 2011-05-19 21:46:01

+0

良好的通話,出於某種原因,我認爲它只返回主要版本。 – 2011-05-19 23:14:51

+1

這是很棒的信息,thanks! – 2011-05-23 07:02:53

7

數據存儲沒有版本的概念。

當您更新模型定義時,您將來創建的任何實體將是新類型,而舊類型將是舊類型。如果您的代碼不知道這些更改,這經常會導致運行時錯誤。

+1

此外,指標會(最終)反映最近上傳index.yaml中 – 2011-05-20 05:54:57

+0

謝謝您的回答! – 2011-05-23 07:03:24

相關問題