我已经查看了Gobook的Googles代码示例。它在本地构建,我可以将它部署到我的本地机器,它正在运行。
当我尝试将其部署到Google App Engine时,会发生在日志中:
com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found. recommended index is:
- kind: Greeting
ancestor: yes
properties:
- name: date
direction: desc
The suggested index for this query is:
<datastore-index kind="Greeting" ancestor="true" source="manual">
<property name="date" direction="desc"/>
</datastore-index>
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:56)
经过一段谷歌搜索后,我发现人们提出了两件事之一。 1)在YAML中进行一些编辑。 2)手动修改TARGET并添加一些索引配置。
我想避免两者,因为1)在最新的留言簿代码示例中没有YAML和2)我更喜欢自动化我的构建而不是每次我想部署时手动破解它。
使用mvn appengine:deploy?
时有什么办法可以解决这个问题这是我一直在使用的指南:https://cloud.google.com/appengine/docs/standard/java/tools/using-maven
答案 0 :(得分:0)
根据应用程序的具体用法手动修改数据存储区索引配置文件是完全正常的(有时甚至是必需)。样本代码中可能缺少此类文件的原因可能是它通常是自动生成的。来自Cloud Datastore Indexes:
重要提示:有关索引和查询的深入讨论,请参阅文章Index Selection and Advanced Search。
App Engine预定义了实体每个属性的简单索引。一个 App Engine应用程序可以在名为
datastore-indexes.xml
的{{3}}中定义更多自定义索引 在您的应用程序/war/WEB-INF/appengine-generated
中生成 目录 。开发服务器自动添加建议 这个文件遇到了无法用它执行的查询 现有指数。您可以通过编辑文件手动调整索引 在上传申请之前。
您还应该注意,数据存储区索引配置是应用程序级配置,由所有应用程序的服务/模块共享,即使它们不是用Java编写的。这就是为什么您可能会看到index
configuration file(仅限java,您的消息中建议的索引格式是针对此文件)和datastore-indexes.xml
(所有语言)的引用。
另一个重要的注意事项是索引配置可以独立于服务/模块代码进行部署,包括使用maven。来自index.yaml
:
<强>应用服务引擎:deployIndex 强>
将 index.yaml 配置文件部署到App Engine。
因此,只需使用此目标即可更新数据存储区索引配置。