google-app-engine - 在 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 并没有发现任何东西。
解决方案
该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
。
推荐阅读
- python - Python在服务器上错误输出货币符号
- java - 为什么这个 PreparedStaement 会引发 mysql 错误?
- react-native - 我在这里捕获的这个错误是什么,为什么它显示 React Native 应用程序的行、列?
- html - Angular 4+ 有轮播吗?
- c# - 为 ASP.NET Core 创建自定义 CLI 命令
- python - PyQt5如何从/向QProcess读取/写入
- feign - OpenFeign Builder 默认客户端
- c# - 两个方法参数之间的泛型类型参数中的可空性不匹配
- python - 在 Python 中动态应用 setter 装饰器
- elasticsearch - 为什么 docker swarm 上的 elasticsearch 需要 transport.host=localhost 设置?