2011-05-19 108 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

相关问题