Firebase + 数据存储 = need_index

2024-03-05

我正在学习 appengine+go 教程,该教程与 Firebase 连接:https://cloud.google.com/appengine/docs/standard/go/building-app/ https://cloud.google.com/appengine/docs/standard/go/building-app/。该代码可在https://github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/gophers/gophers-6 https://github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/gophers/gophers-6,除了我的 Firebase 键之外,其他都是相同的。

我让它在本地工作得很好dev_appserver.py,它会查询 Vision API 并添加标签。但是,在部署到 appengine 后,我在数据存储上收到索引错误。如果我转到 Firebase 控制台,我会看到集合 (Post) 和作为时间戳的字段 (Posted)。

如果我改变这一行:https://github.com/GoogleCloudPlatform/golang-samples/blob/master/appengine/gophers/gophers-6/main.go#L193 https://github.com/GoogleCloudPlatform/golang-samples/blob/master/appengine/gophers/gophers-6/main.go#L193删除Order("-Posted")然后一切正常(重要的是要注意任何Order调用会导致它出错,除了我发布的测试记录是随机顺序的。

在 appengine 中运行时的错误消息是:“获取帖子:API 错误 4(datastore_v3:NEED_INDEX):找不到匹配的索引。”

我尝试创建一个复合索引,或在本地进行测试--require_indexes=true它并没有帮助我调试问题。

编辑:我已将其移至直接使用 Firebase 的数据存储库,而不是 GCP 更新。我从未解决过这个特定问题,但能够继续我的应用程序的实际工作:)


默认情况下,本地开发服务器会自动创建应用程序中调用的实际查询所需的复合索引。从使用开发服务器创建索引 https://cloud.google.com/appengine/docs/standard/go/config/indexconfig#creating_indexes_using_the_development_server:

开发网络服务器(dev_appserver.py https://cloud.google.com/appengine/docs/standard/go/tools/using-local-server)自动添加 当应用程序尝试执行以下查询时,将项目添加到此文件 需要一个索引,但该索引中没有适当的条目 配置文件。

在开发服务器中,如果您执行应用程序的每个查询 将会使得,开发服务器会生成一个完整的列表 中的条目index.yaml file.

当开发 Web 服务器将生成的索引定义添加到index.yaml,它会在以下行下方执行此操作,如果 必要的:

# AUTOGENERATED

开发网络服务器考虑下面的所有索引定义 行是自动的,它可能会更新下面的现有定义 应用程序进行查询时使用此行。

但还需要将生成的索引配置部署到Datastore,并让Datastore更新索引信息(即要进入的索引)Serving状态)以使各个查询不命中NEED_INDEX错误。从更新索引 https://cloud.google.com/appengine/docs/standard/go/config/indexconfig#updating_indexes:

您上传您的index.yaml配置文件到 Cloud Datastore 与gcloud命令。如果index.yaml文件定义任何 Cloud Datastore 中不存在的索引,这些新索引是 建造的。

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

为了避免异常,您必须留出时间来构建所有索引。 有关创建索引的更多信息和示例,请参阅部署 Go 应用程序 https://cloud.google.com/appengine/docs/standard/go/tools/uploadinganapp#updating_indexes.

要将索引配置上传到 Cloud Datastore,请运行 从 index.yaml 所在的目录执行以下命令:

gcloud datastore create-indexes index.yaml

有关信息,请参阅gcloud datastore参考 https://cloud.google.com/sdk/gcloud/reference/datastore/.

您可以使用 GCP Console检查索引的状态 https://console.cloud.google.com/datastore/indexes.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase + 数据存储 = need_index 的相关文章

随机推荐