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


У меня возникли проблемы с индексами движка приложений Google. При запуске моего приложения через 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)

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

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

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

Локально все работает нормально. Я работаю над последней версией Mac OSx. Для развертывания использовалась команда:

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

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

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

Правка:

Мой НДБ.Модель определяется следующим образом:

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)
4 15

4 ответа:

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

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

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

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

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

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

gcloud app deploy 

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

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

gcloud datastore create-indexes index.yaml

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

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

В вашем случае файл yaml будет выглядеть следующим образом:

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

# AUTOGENERATED

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

appcfg.py [options] update_indexes <directory>

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

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