2016-03-15 77 views
0

我使用應用引擎和gwt製作了一個Web應用程序。在這個應用程序中,我也使用谷歌數據存儲。在我部署應用程序之前,我可以訪問我的數據存儲。我存儲了一些數據,然後我能夠在瀏覽器上顯示它們。我剛剛在App Engine中部署了我的應用程序,我無法再顯示它們...更具體地說,我有一個菜單和一個表格。當我從菜單中選擇一些東西時,我會使用rpc從我的數據存儲中獲取正確的數據,然後將它們顯示在我的網頁的表格中。在我部署我的應用程序之前,這工作正常。現在,當我進入我在雲上運行的網頁並點擊菜單上的某些內容時,我會得到一張空表。如何修復此問題?我讀了一些有關憑證的內容,但並不是很有幫助。有人可以解釋我應該怎麼做?當我在我的控制檯中運行該程序時,它可以工作。 這是我用來獲取數據的代碼。如何在部署後從Google App引擎數據存儲中獲取數據

DatastoreService ds= DatastoreServiceFactory.getDatastoreService(); 

    Query q=new Query(s); 
    PreparedQuery pq = ds.prepare(q); 
    for (Entity entity : pq.asIterable()) { 

     table.add(entity.getProperty("Name); 
    }return table; 
+0

你有沒有得到任何異常?錯誤? 「_ can't show_」是什麼意思? –

+0

嗯,我有一個菜單和一張桌子。當我從菜單中選擇一些東西時,我會使用rpc從我的數據存儲中獲取正確的數據,然後將它們顯示在我的網頁的表格中。在我部署我的應用程序之前,這工作正常。現在,當我進入我在雲上運行的網頁並點擊菜單上的某個東西時,我收到一張空表。 –

回答

2

當你開發的代碼,你最有可能使用本地數據存儲,您現在使用鏈接到項目實際的數據存儲部署後,(如果我理解正確你的問題,你希望你的地方數據在部署後出現,因爲loacal數據存儲沒有與實際的數據存儲同步,所以不會發生這種情況。)要上傳或下載初始數據,您可以在服務器端創建一個腳本/處理程序,它將從csv讀取或更好的方式是enable remote api

遠程API基本上是一個基於Web的數據存儲訪問機制。現在,您可以使用python腳本批量插入數據,甚至可以用java編寫代碼,這些代碼可以在本地機器上本地運行,但基本上會影響雲中的數據存儲(通過內部web服務)。

要啓用遠程API

<servlet> 
    <display-name>Remote API Servlet</display-name> 
    <servlet-name>RemoteApiServlet</servlet-name> 
    <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>RemoteApiServlet</servlet-name> 
    <url-pattern>/remote_api</url-pattern> 
</servlet-mapping> 

在Python中,你可以在上面一行

print MyRemoteEntity.query().count() 

對Java讀取this

後寫一個批量插入這樣的腳本

sys.path.append('/usr/local/google_appengine/') 
sys.path.append('/usr/local/google_appengine/lib') 
sys.path.append('/usr/local/google_appengine/lib/yaml/lib/') 
sys.path.append(
    os.path.abspath(
     os.path.dirname(
      os.path.realpath(__file__)))) 
if 'google' in sys.modules: 
    del sys.modules['google'] 

from google.appengine.ext.remote_api import remote_api_stub 
from google.appengine.ext import ndb 
from db import Post 
import csv 



app_id = 'blah' 
host = '%s.appspot.com' % app_id 
remote_api_stub.ConfigureRemoteApiForOAuth(host, '/_ah/remote_api', True) 

+0

如何啓用遠程API?我應該在我曾經用數據存儲進行連接的類上編寫一些代碼嗎? –

+0

我正在使用java!非常感謝!! –

+0

只需確保最後一件事......我應該把遠程API放在我用來存儲數據的類中嗎?並且在安裝API之後,我應該再次運行這個類來將數據存儲在雲數據存儲中? –

1

您在本地創建的數據不會部署到GAE。如果您在本地添加的內容不多,只需在部署的版本上重新創建它,就如同您在本地所做的那樣並繼續開發(注意不要部署本地數據)。如果您本地創建了大量數據 - 您可能需要按照此處的建議使用遠程API來同步這兩個數據。

+0

好,非常感謝! –

相關問題