0

Fehler zurückgegeben ist 500 Interner Serverfehler, wenn die ausgeführte Anwendung eine Abrufanforderung für ViewDogs verarbeitet. Bei GAE-Stack-Treiber Konsole erhalte ich:GAE NeedIndexError:

NeedIndexError: no matching index found - recommended index is: 
- kind:Dog 
    ancestor: yes 
    properties: - 
    name: id 
    direction: desc". 

Ich bestätige es einen Index geladen Hund namens und es zeigt die „Serving“

Auch bestätigen gibt es 4 Hunde erfolgreich erstellt, und sie können aus abgefragt werden die Registerkarte DataStore Entities einzeln und mit SELECT * FROM Dog. Beachten Sie auch die auskommentierte Zeile self.response.write('You dog!'), die wie erwartet zurückkommt, wenn sie nicht kommentiert wird, also vermutlich kein Routenproblem. Ich kann einen einzelnen Hund über GET zurückgeben (dieser Code weggelassen) Code innerhalb der Klasse ViewAllDogs ist wahrscheinlich fehlerhaft, hat mein Bestes getan mit den GAE-Dokumenten.

index.yaml-Datei, die ich bestätigen, hochgeladen und hat den Status: "dienen"

indexes: 
- kind: Dog 
    ancestor: yes 
    properties:- name: id 
    direction: desc 
    - name: name 
    direction: desc 
    - name: type 
    direction: desc 
    - name: weight 
    direction: desc 
    - name: boarded 
    direction: desc 

app.yaml Datei:

runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url: /.* 
    script: main.app 

main.py

import webapp2 
from datetime import datetime 
from google.appengine.ext import ndb 
import webbrowser 
import json 

def gql_json_parser(query_obj): 
    result = [] 
    for entry in query_obj: 
     result.append(dict([(p, unicode(getattr(entry, p))) for p in entry.properties()])) 
    return result 

class Dog(ndb.Model): 
    """ Models an individual Dog """ 
    id = ndb.StringProperty(required = True, indexed = True) 
    name = ndb.StringProperty(required = True, indexed = True) 
    type = ndb.StringProperty(required = True, indexed = True) 
    weight = ndb.IntegerProperty(required = True, indexed = True) 
    boarded = ndb.BooleanProperty(required = True, indexed = True) 

    @classmethod 
    def query_dog(cls, ancestor_key): 
     return cls.query(ancestor=ancestor_key).order(-cls.id) 

class ViewAllDogs(webapp2.RequestHandler): 
    def get(self): 
#  self.response.write('You dog!') 
     parent_dog = self.request.get('parent_dog') 
     ancestor_key = ndb.Key("Dog", parent_dog or '*noDogs*') 
     query_data = Dog.query_dog(ancestor_key).fetch(10) 
     json_query_data = gql_json_parser(query_data) 
     self.response.headers['Content-Type'] = 'application/json' 
     self.response.write(json.dumps(json_query_data)) 

app = webapp2.WSGIApplication([ 
    ('/ViewDogs', ViewAllDogs) 
], debug=True) 

Ähnliche Fragen gibt es im Überfluss, einschließlich Query google app engine datastore for all entities, aber keine lösen mein Problem. Vielen Dank.

+1

Hinweis der Index fehlt dem Index unterscheidet Sie definiert haben. Der benötigte Index muss genau das, was benötigt wird. –

+0

Haben Sie es ein paar Minuten später noch einmal versucht? Wenn Sie Änderungen an Ihren Abfragen oder an Ihrer Datenstruktur vornehmen, dauert die Aktualisierung von Datenspeicherindizes nach der Bereitstellung einige Minuten (möglicherweise mehrere, je nach Größe Ihrer Daten). In einer Produktionsumgebung sollten Sie das Flag "--no-promote" verwenden, auf die Aktualisierung der Indizes warten und den Datenverkehr dann an die neue Version weiterleiten. –

Antwort

0

Wie üblich, ich machte es viel komplizierter, als es sein muss ...

import webapp2, json 
from datetime import datetime 
from google.appengine.ext import ndb 

MAXDOGS = 100 

class Dog(ndb.Model): 
    """ Models an individual Dog """ 
    id = ndb.StringProperty(required = True, indexed = True) 
    name = ndb.StringProperty(required = True, indexed = True) 
    type = ndb.StringProperty(required = True, indexed = True) 
    weight = ndb.IntegerProperty(required = True, indexed = True) 
    boarded = ndb.BooleanProperty(required = True, indexed = True) 

class ViewAllDogs(webapp2.RequestHandler): 
    def get(self): 
     query_data = Dog.query() 
     results = query.fetch(limit = MAX_SLIPS) 
     aList = [] 
     for match in results: 
      aList.append({'id': match.id, 'name': match.name, 'type': match.type, 
          'weight': match.weight, 'boarded': match.boarded}) 
     self.response.headers['Content-Type'] = 'application/json' 
     self.response.write(json.dumps(aList)) 

app = webapp2.WSGIApplication([ 
    ('/ViewDogs', ViewAllDogs)