对于Google App Engine的Java实现,似乎没有Python App Engine的_ah/admin等价物。
我是否可以手动浏览数据存储?这些文件在我的计算机上的哪里可以找到?(我在OS X上使用Eclipse的App Engine插件)。
对于Google App Engine的Java实现,似乎没有Python App Engine的_ah/admin等价物。
我是否可以手动浏览数据存储?这些文件在我的计算机上的哪里可以找到?(我在OS X上使用Eclipse的App Engine插件)。
http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: "开发者应用服务器终于有了数据视图。在本地启动您的应用程序,然后将浏览器指向 http://localhost:8000/datastore
* 以查看它。"
* 截至 1.7.7
目前Java SDK没有数据存储查看器,但它将在下一次SDK发布时提供。同时,您最好编写自己的管理界面并包含数据存储查看代码,或者等待下一个SDK发布。
Java App Engine现在拥有一个本地数据存储查看器,可通过 http://localhost:8080/_ah/admin
访问。
我在Windows+Eclipse环境下有一个本地数据存储,位于\war\WEB-INF\appengine-generated\local_db.bin。
据我所知,它使用名为“协议缓冲”的内部格式。我没有外部工具可以将文件以人类可读的格式呈现。
我正在使用类似以下代码的简单“查看器”:
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException
{
resp.setContentType("text/plain");
final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
final Query query = new Query("Table/Entity Name");
//query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.DESCENDING);
for (final Entity entity : datastore.prepare(query).asIterable()) {
resp.getWriter().println(entity.getKey().toString());
final Map<String, Object> properties = entity.getProperties();
final String[] propertyNames = properties.keySet().toArray(
new String[properties.size()]);
for(final String propertyName : propertyNames) {
resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
}
}
}
http://localhost:8000
而Datastore查看器则是:
http://localhost:8000/datastore
看起来非常整洁 - 符合Google的新设计指南。使用像Notepad++这样的文本编辑器打开\war\WEB-INF\appengine-generated\local_db.bin
文件。
数据是乱码的,但至少您可以阅读它并复制提取它。
由于Google App Engines数据存储查看器不支持显示引用实体的集合,因此我修改了Paul的版本以显示所有后代实体:
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String entityParam = req.getParameter("e");
resp.setContentType("text/plain");
final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
// Original query
final Query queryOrig = new Query(entityParam);
queryOrig.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);
for (final Entity entityOrig : datastore.prepare(queryOrig).asIterable()) {
// Query for this entity and all its descendant entities and collections
final Query query = new Query();
query.setAncestor(entityOrig.getKey());
query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);
for (final Entity entity : datastore.prepare(query).asIterable()) {
resp.getWriter().println(entity.getKey().toString());
// Print properties
final Map<String, Object> properties = entity.getProperties();
final String[] propertyNames = properties.keySet().toArray(new String[properties.size()]);
for(final String propertyName : propertyNames) {
resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
}
}
}
}
需要注意的是,对于空集合/引用实体,不会显示任何内容。
对我来说,解决方法是使用以下gcloud
命令进行登录
gcloud auth application-default login