13

Tôi đang gặp sự cố với chỉ mục của Công cụ ứng dụng của Google. Khi chạy ứng dụng của tôi thông qua GoogleAppEngineLauncher, ứng dụng hoạt động tốt. Khi triển khai các ứng dụng, tôi nhận được lỗi sau:Lỗi Máy ứng dụng của Google: NeedIndexError: không tìm thấy chỉ mục phù hợp

NeedIndexError: no matching index found. 
The suggested index for this query is: 
- kind: Bar 
    ancestor: yes 
    properties: 
    - name: rating 
    direction: desc 

Các lỗi được tạo ra sau dòng mã này:

bars = bar_query.fetch(10) 

Trước khi dòng trên mã, nó đọc:

bar_query = Bar.query(ancestor=guestbook_key(guestbook_name)).order(-Bar.rating) 

Tệp index.yaml của tôi chứa chỉ mục "được đề xuất" chính xác bên dưới # AUTOGENERATED:

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

Tôi có thể thiếu cái gì đó không? Tôi đã xóa tệp index.yaml và triển khai lại ứng dụng (thông qua dòng lệnh) và một tệp ít được tải lên - vì vậy tệp index.yaml có ở đó.

Mọi thứ đang hoạt động tốt tại địa phương. Tôi đang làm việc trên Mac OSx mới nhất. Lệnh được sử dụng để triển khai là:

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

Kho dữ liệu tôi triển khai dựa trên ứng dụng hướng dẫn lưu bút.

Mọi trợ giúp sẽ được đánh giá cao.

EDIT:

My ndb.Model được định nghĩa như sau:

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) 

Trả lời

9

Kiểm tra https://appengine.google.com/datastore/indexes để xem nếu chỉ số này đang hiện diện và tình trạng thiết lập để "phục vụ". Có thể chỉ số vẫn đang được xây dựng.

Môi trường phát triển mô phỏng môi trường sản xuất. Nó không thực sự có chỉ mục trong ý nghĩa Datastore.

+0

Xin chào @Andrei, cảm ơn, tôi đã ở đó. Nó nói: "Bạn chưa tạo chỉ mục cho ứng dụng này. Một số loại truy vấn yêu cầu chỉ mục được xây dựng. Bạn có thể quản lý các chỉ mục của mình trong tệp index.yaml." Trên các diễn đàn khác tôi đọc rằng khi sử dụng index.yaml nó không bao giờ nói "phục vụ". – ISJ

+0

Tôi đọc ở đâu đó như sau: "Chỉ mục mà bạn đã đặt trong datastore-index.xml của bạn là một chỉ mục thuộc tính duy nhất. Điều này có nghĩa là nó được Datastore tự động tạo và sẽ không hiển thị trong bảng điều khiển của bạn." – ISJ

+0

Bạn là đúng - chỉ mục thuộc tính duy nhất không cần phải được xác định và chúng sẽ không hiển thị trên trang chỉ mục. Tôi quên hỏi rõ ràng: thuộc tính này có được lập chỉ mục không? –

3

Tôi đã khắc phục sự cố này bằng cách di chuyển chỉ mục mà lỗi được cho là bị thiếu phía trên dòng tạo tự động trong tệp "index.yaml".

Trong trường hợp của bạn các tập tin yaml sẽ trông giống như:

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

# AUTOGENERATED 

Sau đó, tất cả các bạn phải làm là cập nhật ứng dụng của bạn sau đó cập nhật các chỉ số, bạn nên cập nhật các chỉ số bằng cách chạy lệnh sau đây.

appcfg.py [options] update_indexes <directory> 

Với thư mục là thư mục có liên quan đến tệp index.yaml của bạn. Sau đó, bạn sẽ thấy chỉ mục đó trên trang tổng quan của mình tại https://appengine.google.com/datastore/indexes

Bản cập nhật ban đầu sẽ là "đang chờ xử lý" nhưng sau khi chỉ mục cho biết "đang phân phối", bạn sẽ có thể thực hiện truy vấn của mình.

+0

app.yaml cần phải ở trong cùng thư mục với index.yaml để làm việc ở trên. Và dòng lệnh không thích nó nếu index.yaml nằm trong thư mục gốc. Và SDK không thích nó nếu app.yaml nằm trong thư mục tuyến đường. Giải pháp: Tôi phải tạm thời đặt cả app.yaml và index.yaml vào thư mục config. –

10

Có lẽ hơi muộn một chút, nhưng chạy "gcloud app deploy index.yaml" đã giúp từ khi tự triển khai chạy tự bỏ qua tệp index.yaml.

Như những người khác đã nói, trang tổng quan tại https://appengine.google.com/datastore/indexes sẽ hiển thị "đang chờ xử lý" trong một thời gian.

+3

Nếu bạn sử dụng lệnh appcfg.py hoặc appcfg.sh để triển khai một ứng dụng cho App Engine, tệp cấu hình chỉ mục sẽ được triển khai tự động. Nếu bạn sử dụng lệnh triển khai ứng dụng gcloud để triển khai ứng dụng của mình, tệp cấu hình chỉ mục không được triển khai tự động. Bạn phải liệt kê cụ thể index.yaml làm đối số để triển khai ứng dụng gcloud hoặc chạy các chỉ mục tạo kho dữ liệu gcloud để triển khai tệp cấu hình chỉ mục. – afed

2

Tôi tình cờ gặp vấn đề tương tự và nhận xét của bạn đã giúp tôi đi đúng hướng. Đây là những gì Google nói cách xử lý này:

Theo tài liệu Google câu chuyện là sử dụng

gcloud app deploy 

file index.yaml không tải lên (câu hỏi là tại sao không?). Dù sao, người ta phải tải lên tệp chỉ mục này theo cách thủ công.

Để làm như vậy, các tài liệu cung cấp cho các lệnh sau:

gcloud datastore create-indexes index.yaml 

(giả như bạn thực hiện điều này từ cùng một thư mục của tập tin index.yaml) Một khi bạn đã làm điều này bạn có thể đi đến Datastore giao diện điều khiển và bạn sẽ thấy chỉ mục đã được tạo. Sau đó nó sẽ bắt đầu được lập chỉ mục (mất khoảng 5 phút trong trường hợp của tôi) và khi chỉ mục đang được phục vụ, bạn có thể bắt đầu ứng dụng của mình.

Các vấn đề liên quan