【问题标题】:NeedIndexError at Google App Engine foreverGoogle App Engine 上的 NeedIndexError 永远
【发布时间】:2015-10-28 10:20:02
【问题描述】:

几个小时前,我在 GAE 部署并运行了我的应用程序。它仍然失败,因为它需要订购某些数据存储项目,而 GAE 仍未生成所需的索引。所以在.order() 处,它会抛出一个NeedIndexError。这需要多长时间?

我过去曾为 10~ 个 GAE 应用程序执行相同的程序,据我记忆,它从未如此缓慢。 (好吧,它一直很慢......)

  • 旧控制台中的“数据存储索引”页面只显示“您尚未为此应用程序创建索引。”。
  • 新控制台什么也没说。它只是显示一个“蓝色警报”,就好像我还没有等到自己死去一样。警报中的消息是:

Cloud Datastore 查询由索引、可扩展数据提供支持 随着属性值的变化而实时更新的结构。 您项目的数据存储索引配置指定它的索引 需要支持其查询。 Cloud Datastore 将新索引构建为 部署索引配置时需要。您可以检查准备好的 使用此控制台查看您应用的索引状态。

(即笑话)

我该怎么办?

更新:

这是 index.yaml:

indexes:

# AUTOGENERATED

- kind: Mjquizinfo
  ancestor: yes
  properties:
  - name: version
    direction: desc

【问题讨论】:

  • 我所做的是为我需要一个新索引的实体创建一个游标查询,为其加载和保存每个实体,从而为现有实体创建索引。如果您的索引是复合索引,您应该检查该索引是否部署在正确的索引配置文件中。
  • 我只是按原样部署本地生成的index.yaml。它应该很简单。我将其粘贴在我的问题中。
  • 据我所知,当您定义新索引时,只有新实体的属性才会被索引。旧实体不受影响。但错误不应该是这样的。您在代码中排序的顺序是否与定义的索引相同(asc vs. desc)?
  • 是的,它是一样的。这是新项目的另一个应用程序 B,但与应用程序 A 完全相同的代码已经运行了 6 个多月。顺序相同(- 为 desc)。三个小时,仍然没有任何回应。我必须放弃今天。它明天会神奇地工作......
  • 不会是第一次睡个好觉解决应用引擎的问题 :-)

标签: python google-app-engine


【解决方案1】:

FWIW,在某些情况下(例如多模块应用程序)用于部署应用程序代码的普通 appcfg.py update可能不会更新 index.yaml 文件。

尝试使用specifically updating the index 使用appcfg.py update_indexes - 您应该能够立即在开发者控制台中看到索引信息(索引可能仍需要一段时间才能执行并生效)。

【讨论】:

  • 12 小时后仍然没有成功,这似乎运作良好 - 所述索引现在至少可见,在“准备”中。在 GAE 工作了 2 年以上,我以前从来没有这样做过。谢谢。 FWIW,我不再使用 appcfg.py 进行部署,我通常从 git 存储库进行部署。与索引有关的工作流程可能发生了一些变化。
  • 几秒钟后它就进入了“服务”状态。你让我开心。
  • 如果您有大量数据,则需要一段时间。也许你以前的项目没有。
猜你喜欢
  • 2019-11-10
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2013-05-18
相关资源
最近更新 更多