2014-02-09 3 views
2

Мы представили новую модель для нашего Datastore несколько дней назад. Удивительно я все еще получаю Индекс предупрежденийКак устранить предупреждение об индексе GAE?

W 2014-02-09 03:38:28.480 
suspended generator run_to_queue(query.py:938) raised NeedIndexError(no matching index found. 
The suggested index for this query is: 
- kind: FeelTrackerRecord 
    ancestor: yes 
    properties: 
    - name: timestamp) 

W 2014-02-09 03:38:28.480 
suspended generator helper(context.py:814) raised NeedIndexError(no matching index found. 
The suggested index for this query is: 
- kind: FeelTrackerRecord 
    ancestor: yes 
    properties: 
    - name: timestamp) 

, даже если индекс подается под DataStore Indexes

enter image description here

indexes: 

# AUTOGENERATED 

# This index.yaml is automatically updated whenever the dev_appserver 
# detects that a new type of query is run. If you want to manage the 
# index.yaml file manually, remove the above marker line (the line 
# saying "# AUTOGENERATED"). If you want to manage some indexes 
# manually, move them above the marker line. The index.yaml file is 
# automatically uploaded to the admin console when you next deploy 
# your application using appcfg.py. 


- kind: FeelTrackerRecord 
    ancestor: yes 
    properties: 
    - name: record_date 
    - name: timestamp 

Что я упускаю, пожалуйста?

+0

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

+1

Указанные вами индексы не соответствуют рекомендуемому индексу. Они должны соответствовать точно –

ответ

0

Я упомянул в комментарии, что ваши индексы не соответствуют требуемым. Ошибка говорит

raised NeedIndexError(no matching index found. 
The suggested index for this query is: 
- kind: FeelTrackerRecord 
    ancestor: yes 
    properties: 
    - name: timestamp) 

Однако вам индекс вы список отличается

- kind: FeelTrackerRecord 
    ancestor: yes 
    properties: 
    - name: record_date 
    - name: timestamp 

Вы видите разницу?

Просто добавьте индекс, как указано, и обновите свои индексы.

+0

По-прежнему получаю эту ошибку каждый раз, когда начинаю новый проект GAE. Я уверен, что index.yaml верен; я просто передаю тот, который генерируется локальным GoogleAppEngineLauncher, и он выглядит точно так же, как и предложенный в ошибке. Кажется, что эта проблема «исправляется» через некоторое время, но это неясно, когда это происходит. – Jonny

3

Я, наконец, нашел проблему.

Лучший способ решить эту проблему - убедиться, что локальный index.yaml пуст (удалите все индексы). Затем просто запустите приложение GAE на локальном хосте и получите доступ к своему приложению, как и следовало ожидать. Http доступа довольно проста над браузером, и если GET/POST через REST требуется вы можете использовать curl из терминала:

GET:

curl --user [email protected]:test123 http://localhost:8080/api/v1.0/records/1391944029 

POST:

curl --user [email protected]:test123 http://localhost:8080/api/v1.0/records/1391944029 -d '{"records": [ 
     { 
      "notes": "update", 
      "record_date": "2014-02-02", 
      "timestamp": 1391944929 
     } 
    ], "server_sync_timestamp": null}' -X POST -v -H "Accept: application/json" -H "Content-type: application/json" 

GAE теперь обновляет index.yaml и добавляет туда правильные индексы.

После развертывания вашего приложения вам необходимо очистить старые индексы. Это делается через терминал:

appcfg.py vacuum_indexes src 

После входа в систему с учетными данными он будет просить вас о старых индексов, которые уже не в вашем index.yaml и если они должны быть удалены. Нажмите y и продолжайте.

+1

Да, это немного неинтуитивно, но это работает. – Isaac

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