首页 > 解决方案 > 在 Google App Engine for Golang 中导入 index.yaml 的位置在哪里?

问题描述

使用 Bookshelf 教程和 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   

为什么不导入索引?

在 Golang App Engine 代码中的什么地方导入了 index.yaml?

我搜索了 src 并没有发现任何东西。

标签: google-app-enginego

解决方案


index.yaml文件不打算在您的应用程序代码中导入/使用,它打算部署到 Datastore 服务(与您的应用程序部署分开/独立!)以配置其索引活动。从更新索引

您可以index.yaml使用 gcloud 命令将配置文件上传到 Cloud Datastore。如果index.yaml文件定义了 Cloud Datastore 中不存在的任何索引,则会构建这些新索引。

Cloud Datastore 可能需要一段时间才能创建所有索引,因此这些索引不会立即可供 App Engine 使用。如果您的应用程序已配置为接收流量,则需要仍在构建过程中的索引的查询可能会发生异常。

为避免异常,您必须为所有索引的构建留出时间。

只有在正确部署并在需要时完成索引更新操作(即索引达到Serving状态)之后,需要该索引的应用程序查询才能工作。

index.yaml文件还被本地开发服务器在其数据存储仿真中使用。默认情况下,它会使用遇到的查询的必要索引自动更新文件,但文件不会自动部署到数据存储区。--require_indexes但是您可以使用该选项禁用此行为。从本地开发服务器选项

--require_indexes=yes|no

index.yaml禁用文件中条目的自动生成。相反,当应用程序进行要求在文件中定义其索引并且未找到索引定义的查询时,将引发异常,类似于在 App Engine 上运行时会发生的情况。默认值为no


推荐阅读