Google App Engine 数据存储中的版本控制

15 投票
2 回答
1801 浏览
提问于 2025-04-16 17:59

Google App Engine 有一个应用版本的概念,也就是说,你可以同时运行多个版本的应用,并且可以通过不同的子域名来访问它们。例如:http://1.my-app-name.appspot.comhttp://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'])

撰写回答