我使用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;
答案 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来同步这两个数据。