【问题标题】:Where is index.yaml imported in Google App Engine for Golang?在 Google App Engine for Golang 中导入 index.yaml 的位置在哪里?
【发布时间】:2018-07-20 13:44:45
【问题描述】:

使用 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-engine go


    【解决方案1】:

    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 文件中条目的自动生成。 相反,当应用程序进行要求其 在文件中定义了索引并且未找到索引定义,则 将引发异常,类似于运行时会发生的情况 应用引擎。默认值为no

    【讨论】:

    • 我在 ~/google-cloud-sdk 中搜索了错误消息“找不到匹配的索引”但找不到。我可以找到创建的 index.yaml 文件,但找不到导入本地开发服务器的位置。
    • 您不会看到错误消息 - 开发服务器会自动更新 index.yaml 文件并考虑更新。我认为没有关于这样做的信息,或者至少我没有注意到。另请参阅我的答案更新。
    • 在python源代码中是否必须有一个带有错误消息的字符串才能让本地服务器抛出它?如果不是,错误信息在哪里定义?
    • 嗯,不确定。您可以从 --require_indexes 可选参数开始,然后跟踪。
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2014-03-30
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2011-03-03
    相关资源
    最近更新 更多