2017-05-04 130 views
1

我已經查看了Google留言簿的Google代碼示例。它在本地構建,我可以將其部署到本地計算機,並且工作正常。Google App引擎留言簿示例索引不起作用

當我嘗試將它部署到谷歌應用程序引擎發生這種情況在日誌中:

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

這是完全正常的(有時甚至需要)根據您的應用程序的具體使用手動修改數據存儲索引配置文件。示例代碼中可能缺少此類文件的原因可能是它通常是自動生成的。從Cloud Datastore Indexes

重要:用於索引和查詢的深入討論,請參閱文章Index Selection and Advanced Search

App Engine預定義實體的每個屬性的簡單索引。一個 App Engine應用程序可以在名爲datastore-indexes.xmlindex configuration file中定義進一步的自定義索引,這是在您的應用程序的/war/WEB-INF/appengine-generated 目錄中生成的 。開發服務器會自動向該文件添加 建議,因爲它遇到無法使用現有索引執行的查詢。在上傳應用程序之前,您可以通過編輯文件 來手動調整索引。

您還應該注意,數據存儲區索引配置是應用程序級別的配置,由所有應用程序的服務/模塊共享,即使它們不是用Java編寫的。這就是爲什麼您可能會看到對datastore-indexes.xml(僅限於java,建議您的消息中的索引格式爲此文件)和index.yaml(所有語言)的引用。

另一個重要的注意事項是,索引配置可以獨立於服務/模塊代碼進行部署,包括使用maven。從App Engine Maven Plugin Goals and Parameters

AppEngine上:deployIndex

部署的index.yaml中配置文件到App Engine。

所以,只需使用此目標來更新您的數據存儲索引配置。