Ошибка 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 ответа:
Проверка 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
Обновление изначально будет "ожидающим", но после того, как индекс скажет "обслуживающий", вы сможете сделать свой запрос.