2015-04-30 5 views
0

Я вводил размещение имен в свое приложение, но у меня возникла проблема с одним из моих существующих запросов, который выполняет следующую операцию, чтобы определить, существует ли сущность для данного ключа.Ошибки приложения Google appengine с пространством имен

// c is of type context.Context 
c, _ = appengine.Namespace(c, "name") 

k := datastore.NewKey(c, "Kind", "", id, nil) 

q := datastore.NewQuery("Kind").Filter("__key__ =", k).KeysOnly() 
keys, err := q.GetAll(c, nil) 

Когда эта команда выполняется с пространством имен применяется к контексту, она возвращает следующее сообщение об ошибке:

datastore_v3 API error 1: __key__ filter namespace is but query namespace is db

Я мог бы просто использовать Get запрос вместо этого, но я не необходимо фактически получить объект вообще. Кроме того, запросы только на ключ бесплатны!

Update

Кажется, что все запросы терпят неудачу после того, как я ввел пространства имен. В документации не упоминается какой-либо специальная обработка для индексов:

https://cloud.google.com/appengine/docs/go/multitenancy/multitenancy

+0

Вы используете один и тот же контекст, при создании ключа? Похоже, что они не используют одно и то же пространство имен. –

+0

Они создаются в том же месте, я буду обновлять код, чтобы это отразить. – Aaron

ответ

0

«По умолчанию хранилища использует текущее пространство имен для запросов хранилища данных API применяет это текущее пространство имен datastore.Key объекты когда. поэтому они должны быть осторожны, если приложение хранит ключевые объекты в сериализованных формах, поскольку пространство имен сохраняется в этих сериализации ».

Использование пространств имен с Datastore
https://cloud.google.com/appengine/docs/go/multitenancy/multitenancy#Go_Using_namespaces_with_the_Datastore

Смежные вопросы