使用书架教程和Auth软件包。
ListBooksCreatedBy查询失败,并显示以下错误:
could not list books: datastoredb: could not list books: rpc error: code = FailedPrecondition desc = no matching index found. recommended index is:
- kind: Book
properties:
- name: CreatedByID
- name: Title
但是,index.yaml确实存在,并且与app.yaml位于同一目录中:
索引YAML内容:
indexes:
# This index enables filtering by "CreatedByID" and sort by "Title".
- kind: Book
properties:
- name: CreatedByID
direction: asc
- name: Title
direction: asc
为什么不导入索引?
index.yaml在Golang App Engine代码中的哪里导入?
我搜索了src,却一无所获。
答案 0 :(得分:2)
index.yaml
文件不打算在您的应用程序代码中导入/使用,而是打算部署到Datastore服务(与应用程序部署单独/独立地进行!)以配置其索引活动。来自Updating indexes:
您将
index.yaml
配置文件上传到Cloud Datastore 使用gcloud命令。如果index.yaml
文件定义了任何索引 Cloud Datastore中不存在的索引,这些新索引就会建立。Cloud Datastore可能需要一段时间才能创建所有索引,并且 因此,这些索引不会立即提供给App Engine。 如果您的应用已配置为接收流量,则出现异常 对于需要仍在索引中的索引的查询,可能会发生 建立过程。
为避免出现异常,必须为所有索引建立时间。
只有在正确部署并在需要时完成索引更新操作(即索引达到Serving
状态)之后,需要该索引的应用程序查询才能正常工作。
本地开发服务器在其数据存储区仿真中也使用index.yaml
文件。默认情况下,它会为遇到的查询自动使用必要的索引更新文件,但该文件不会自动部署到数据存储区。但是您可以使用--require_indexes
选项禁用此行为。来自Local Development Server Options:
--require_indexes=yes|no
禁止自动生成
index.yaml
文件中的条目。 相反,当应用程序进行查询时要求 在文件中定义索引,但找不到索引定义, 将引发异常,类似于在 App Engine。默认值为no
。