Почему я получаю это исключение в GAE - PullRequest
3 голосов
/ 21 июля 2010

Я только что протестировал и повторно развернул мое приложение в тестовом экземпляре, и он работал нормально, затем я изменил идентификатор приложения и повторно развернул его в своем производственном экземпляре, и у меня возникла проблема с индексацией.Как мне избежать этого в будущем?Сначала я попытался протестировать его, и он работал нормально!

Uncaught exception from servlet
com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found..      <datastore-index kind="Article" ancestor="false" source="manual">
    <property name="tags" direction="asc"/>
    <property name="created" direction="asc"/>
</datastore-index>
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:40)
at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:67)

Консоль администратора говорит, что это «создание» индекса.Уже 20 минут сказано!Сколько времени это займет!?

Ответы [ 4 ]

10 голосов
/ 21 июля 2010

Когда вы создаете новые запросы и используете их впервые на локальном компьютере, они всегда работают в первый раз. Когда вы впервые запускаете эти новые запросы в движке приложений Google, они возвращают это исключение, поскольку серверам движка приложений Google требуется некоторое время для создания «индекса», чтобы ваш запрос работал правильно.

Я бы порекомендовал при создании новых запросов дать им однократный запуск в производственной среде, чтобы создать «индекс», чтобы, когда пользователи обращались к ним, они работали в первый раз.

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

5 голосов
/ 21 июля 2010

Способ решения этой проблемы состоит в том, чтобы поддерживать несколько версий для моего приложения. Как правило, что-то вроде этого:

  • Версия 1 : текущее значение по умолчанию
  • Версия 2 : следующий выпуск

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

Так что, по сути, вы можете переключаться между версией 1 и 2 при выпуске новой версии.

Я бы посоветовал вам провести предварительное тестирование в другом тестируемом «Приложении» перед загрузкой в ​​развернутое «Приложение».

2 голосов
/ 01 августа 2013

Это происходит из-за того, что индексы хранилища данных движка приложения не инициализированы, т. Е. Ответ коридора правильный.Я добавляю свое исправление для java [я предполагаю, что python и index.yaml имеют аналогичное исправление].

Вы можете увидеть, какие индексы используются для вашей учетной записи Google на https://appengine.google.com/.щелкните ссылку на приложение слева и в левом меню выберите «Индексы хранилища данных» в разделе «данные»

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

Во-первых, вы должны знать, что при отладке в локальной среде каждый раз при сохранении нового «вида» сущности создается файл с именем datastore-indexes-auto-xml.

В локальной среде его можно мгновенно использовать длязапрос, но есть задержка при обновлении datastore-indexes-auto-xml.

При развертывании приложения в appengine автоматически создается сгенерированный datastore-indexes-auto-xml, и индексы данных обновляются намного быстрее[чтобы увидеть результаты, обновите страницу].

Итак

  1. Убедитесь, что ни одна из ваших сущностей не имеет недопустимых знаков, например '&'.
  2. Откройте индексы данныхпросмотреть на appengine.google.com.
  3. Убедитесь, что вы не удалили datastore-indexes-auto-xml.[Я делаю это регулярно]
  4. Сохраняйте сущность каждого «вида»!
  5. Используйте все «виды» в запросах!
  6. Убедитесь, что datastore-indexes-auto-xml обновляется [я иногда даже перезапускаю eclipse]
  7. Развертывание в appengine.
  8. Обновление представления индексов данных в браузере.
  9. Подождите, пока не увидите индексы enter image description here
  10. Пожалуйста, скажите Google, чтобы это исправить.
  11. Это было информативно, но не сработало для меня: введите описание ссылки здесь
  12. Это также было информативноно у меня не сработало: введите описание ссылки здесь
1 голос
/ 21 июля 2010

Проверьте файл index.yaml и убедитесь, что в нем указаны правильные индексы и т. Д.

...