我刚刚测试并将我的应用程序重新部署到测试实例,它工作正常,然后我更改了应用程序ID并重新部署到我的生产实例,我得到了一个索引问题。我将来如何避免这种情况?我首先尝试测试它并且工作正常!
Uncaught exception from servlet
com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.. <datastore-index kind="Article" ancestor="false" source="manual">
<property name="tags" direction="asc"/>
<property name="created" direction="asc"/>
</datastore-index>
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:40)
at com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:67)
管理控制台说它正在“构建”索引。它说现在20分钟!需要多长时间!?
答案 0 :(得分:10)
当您创建新查询并在本地计算机上首次使用它们时,它们始终是第一次工作。当您第一次在谷歌应用引擎上运行这些新查询时,他们将返回此异常,因为谷歌应用引擎服务器需要一些时间来生成“索引”以允许您的查询正常工作。
我建议您在创建新查询时,在生产环境中为它们提供一次性运行以构建“索引”,这样当用户点击它们时,它们就会第一次运行。
其次,在您需要之前手动预先定义查询并将其上传到服务器,意味着当您真正需要它们时,它们可能已经在服务器上构建。
答案 1 :(得分:5)
我解决此问题的方法是为我的应用维护许多版本。 通常是这样的:
当我准备好部署新版本时,我会在此实例中将其上传到版本2 。构建索引后,我将版本2 设置为默认值。这样客户就不会遇到任何停机或错误。
因此,在发布新版本时,您可以在版本1和版本2之间进行交换。
我建议您在上传到已部署的“应用程序”之前,在不同的测试“应用程序”中进行预测试。
答案 2 :(得分:2)
这是因为app-engine数据存储索引未初始化,即corydoras的答案是正确的。我正在添加我的java修复[我假设python和index.yaml有类似的修复]。
您可以在https://appengine.google.com/上查看您使用自己的Google帐户投放的索引。单击左侧和左侧菜单上的应用程序链接,选择数据
下的数据存储索引当对数据存储区进行新查询时,可能需要数小时才能更新数据索引。
首先,您应该知道,每次存储新的“Kind”实体时,本地环境中的调试都会创建一个名为datastore-indexes-auto-xml的文件。
在本地环境中,它可以立即用于查询,但更新数据存储索引-auto-xml会有延迟。
将应用程序部署到appengine时,会提交自动生成的datastore-indexes-auto-xml,并且数据索引的更新速度会更快[以查看结果刷新页面]。
所以
答案 3 :(得分:1)
检查index.yaml文件并确保在那里指定了正确的索引等。