如何在部署后从Google App引擎数据存储区获取数据

时间:2016-03-15 16:03:01

标签: google-app-engine google-cloud-datastore

我使用app引擎和gwt创建了一个Web应用程序。在这个应用程序中我也使用谷歌数据存储。在部署我的应用程序之前,我可以访问我的数据存储区。我存储了一些数据然后我能够在浏览器上显示它们。我刚刚在App Engine中部署了我的应用程序,我无法再显示它们了...更具体的说,我有一个菜单和一个表。当我从菜单中选择一些内容时,我会创建一个rpc以从我的数据存储中获取正确的数据,然后我将它们显示在我的网页中的表格上。在我部署我的应用程序之前,这工作正常。现在,当我进入我在云端运行的网页并单击菜单上的某些内容时,我得到一张空桌子。我该如何解决这个问题?我读了一些关于凭证的内容但是没有用。有人可以解释我该怎么办?当我在我的控制台中运行程序时,它可以工作。 这是我用来获取数据的代码。

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;

2 个答案:

答案 0 :(得分:2)

在开发代码时,您最有可能使用本地数据存储区,在部署之后,您现在正在使用链接到项目的实际数据存储区。(如果我已正确理解您的问题,您希望本地数据出现在之后部署,这不会发生,因为loacal数据存储区未与实际数据存储区同步。)要上传或下载初始数据,您可以在服务器端创建一个脚本/处理程序,它将从csv读取或更好的方法是{{ 3}}

远程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中你可以像这样编写一个批量插入脚本

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)

在上面一行之后

print MyRemoteEntity.query().count()

for java read enable remote api

答案 1 :(得分:1)

您在本地创建的数据不会部署到GAE。如果您没有在本地添加大部分内容 - 只需在部署版本上重新创建它,就像在本地执行它一样,并在考虑到这一事实的情况下继续开发(本地数据不会被部署) )。如果您在本地创建了大量数据 - 您可能需要按照此处的建议使用远程API来同步这两个数据。