2016-03-15 78 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

好,非常感谢! –

相关问题