Подтвердить что ты не робот

Ошибка Google App Engine: NeedIndexError: найден соответствующий индекс соответствия

У меня возникают проблемы с индексами Google App Engine. При запуске моего приложения через приложение GoogleAppEngineLauncher приложение работает нормально. При развертывании приложения я получаю следующую ошибку:

NeedIndexError: no matching index found.
The suggested index for this query is:
- kind: Bar
  ancestor: yes
  properties:
  - name: rating
    direction: desc

Ошибка возникает после этой строки кода:

 bars = bar_query.fetch(10)

Перед приведенной выше строкой кода он читает:

bar_query = Bar.query(ancestor=guestbook_key(guestbook_name)).order(-Bar.rating)

Мой файл index.yaml содержит точный "предложенный" индекс ниже # AUTOGENERATED:

- kind: Bar
  ancestor: yes
  properties:
  - name: rating
    direction: desc

Может, я что-то упустил? Я удалил файл index.yaml и снова развернул приложение (через командную строку), и один файл был загружен, поэтому файл index.yaml существует.

Все работает нормально локально. Я работаю над последним Mac OSx. Команда, используемая для развертывания, была следующей:

appcfg.py -A app-name --oauth2 update app

Реализовано хранилище, основанное на учебном приложении гостевой книги.

Любая помощь будет принята с благодарностью.

EDIT:

My ndb.Model определяется следующим образом:

class Bar(ndb.Model):
    content = ndb.StringProperty(indexed=False)
    lat = ndb.FloatProperty(indexed=False)
    lon = ndb.FloatProperty(indexed=False)
    rating = ndb.IntegerProperty(indexed=True)
    url = ndb.TextProperty(indexed=False)
4b9b3361

Ответ 1

Отметьте https://appengine.google.com/datastore/indexes, чтобы увидеть, присутствует ли этот индекс, и статус установлен на "обслуживание". Возможно, что индекс все еще строится.

Среда разработки эмулирует производственную среду. На самом деле это не имеет индексов в смысле Datastore.

Ответ 2

Вероятно, немного поздно, но запуск "gcloud app deploy index.yaml" помог с момента запуска развертывания сам проигнорировал файл index.yaml.

Как говорили другие, панель управления https://appengine.google.com/datastore/indexes покажет "ожидающий" время.

Ответ 3

Я наткнулся на ту же проблему, и ваши комментарии помогли мне в правильном направлении. Здесь Google говорит, как с этим справиться:

Согласно документации Google, история состоит в том, что использование

gcloud app deploy 

файл index.yaml не загружается (вопрос почему?). В любом случае, нужно загрузить этот файл индекса вручную.

Для этого в документации приведена следующая команда:

gcloud datastore create-indexes index.yaml

(предположим, что вы выполните это из того же каталога файла index.yaml) Как только вы это сделаете, вы можете перейти на консоль Datastore, и вы увидите, что индекс был создан. Затем он начнет индексироваться (занял около 5 минут в моем случае), и как только индекс будет обслуживаться, вы можете запустить свое приложение.

Ответ 4

Я исправил эту проблему, перемещая индекс, который, по словам ошибки, отсутствует над строкой автоматического генерации в файле index.yaml.

В вашем случае файл yaml будет выглядеть так:

indexes:
- kind: Bar
 ancestor: yes
 properties:
 - name: rating
   direction: desc

# AUTOGENERATED

Затем вам нужно обновить приложение, а затем обновить индексы, обновив индексы, выполнив следующую команду.

appcfg.py [options] update_indexes <directory>

Если каталог является каталогом относительно вашего файла index.yaml. Затем вы должны увидеть этот индекс на панели управления https://appengine.google.com/datastore/indexes

Первоначально обновление будет "ожидающим", но после того, как в индексе указывается "обслуживание", вы сможете сделать свой запрос.

Ответ 5

В моем случае я загрузил индексный файл вручную, как показано ниже:

gcloud datastore indexes create "C:\Path\of\your\project\index.yaml"

Затем вы должны подтвердить обновление:

Configurations to update:

descriptor:      [C:\Path\of\your\project\index.yaml]
type:            [datastore indexes]
target project:  [project_name]


Do you want to continue (Y/n)?  y

Затем вы можете перейти к консоли хранилища данных, чтобы проверить, был ли индекс создан по этой ссылке: https://console.cloud.google.com/datastore/indexes.