2011-05-19 13 views
14

Google App Engine tiene el concepto de versiones de aplicación. es decir, puede tener múltiples versiones de su aplicación ejecutándose de manera simultánea y accesible en diferentes subdominios. Por ejemplo: http://1.my-app-name.appspot.com, http://2.my-app-name.appspot.com.Google App Engine Versiones en el almacén de datos

¿Qué aspectos de la aplicación son realmente "versionados" por esto? ¿Es solo la base de código de archivos estáticos de Python +? ¿Tiene el almacén de datos el concepto de "versiones"? Si no, ¿qué sucede cuando actualizo la definición de un modelo de Google App Engine?

Gracias!

Respuesta

25

Correcto, la versión de la aplicación se refiere solo a los archivos cargados. Ambas versiones usan con el mismo almacén de datos.

Tenga en cuenta que el almacén de datos en sí no tiene esquemas. Cada entidad es una colección independiente de pares clave/valor. Dos entidades del mismo tipo no tienen que compartir el mismo conjunto de propiedades o tipos de propiedad. db.Model proporciona una abstracción de ORM alrededor del almacén de datos, pero no define ni impone ningún tipo de esquema global.

Mientras que la tienda de datos no está versionada, admite namespacing. Si usted quiere un nuevo segmento de almacén de datos para cada versión principal de la aplicación, se puede hacer esto:

import os 
from google.appengine.api import namespace_manager 

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

Probablemente debería dividir la cadena de versión y crear el espacio de nombres en función del valor de la versión principal. 'major_ver, minor_ver = os.environ.get ('CURRENT_VERSION_ID'). rsplit ('.', 1); namespace_manager.set_namespace (major_ver) 'El valor de versión menor cambia con cada implementación, incluso si no cambia el valor de la versión principal. – Calvin

+0

Buena llamada, por alguna razón, estaba pensando que solo devolvía la versión principal. –

+1

Esta es una gran información, gracias! –

7

Datastore no tiene ningún concepto de versiones.

Al actualizar una definición de modelo, las entidades que cree en el futuro serán del tipo nuevo y las anteriores serán del tipo anterior. Esto frecuentemente conduce a errores de tiempo de ejecución si su código no tiene conocimiento de estos cambios.

+1

Además, los índices se (con el tiempo) reflejar el subido más recientemente index.yaml –

+0

Gracias por su respuesta! –

Cuestiones relacionadas