Google App Engine 数据存储中的版本控制
Google App Engine 有一个应用版本的概念,也就是说,你可以同时运行多个版本的应用,并且可以通过不同的子域名来访问它们。例如:http://1.my-app-name.appspot.com
和 http://2.my-app-name.appspot.com
。
那么,应用的哪些部分实际上是“有版本”的呢?是只有 Python 代码和静态文件吗?数据存储有没有“版本”的概念?如果没有,当我更新 Google App Engine 模型的定义时,会发生什么呢?
谢谢!
2 个回答
7
数据存储没有版本的概念。
当你更新一个模型的定义时,之后创建的任何实体都会是新类型,而之前的实体还是旧类型。如果你的代码没有意识到这些变化,通常会导致运行时错误。
26
没错,应用版本只指你上传的文件。两个版本使用的是同一个数据存储。
需要注意的是,这个数据存储本身是没有固定结构的。每个实体都是一组独立的键值对。即使是同一种类的两个实体,它们也不需要共享相同的属性或属性类型。db.Model 提供了一种对数据存储的抽象方式,但并不定义或强制任何全局结构。
虽然数据存储没有版本控制,但它支持 命名空间。如果你想为你的应用的每个主要版本创建一个新的数据存储部分,你可以这样做:
import os
from google.appengine.api import namespace_manager
namespace_manager.set_namespace(os.environ['CURRENT_VERSION_ID'])