首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接for Datastore和App开发服务器?

如何连接for Datastore和App开发服务器?
EN

Stack Overflow用户
提问于 2019-09-25 15:59:32
回答 1查看 686关注 0票数 1

我们正在计划将运行在for Java8上的内部应用程序从现在取代的App引擎API迁移到推荐的数据存储模式下的云修复客户端库,也是为了能够移植到其他执行环境。

除了缺少IN/OR查询操作符的大量问题外,我们还在为本地测试的设置而挣扎:根据使用Java 8本地开发服务器

开发web服务器使用计算机上的本地文件支持的Datastore模拟Datastore。数据存储名为local_db.bin,它是在应用程序的WAR目录中,在WEB/appengine生成/目录中创建的。

但是我们不知道如何将用于Datastore的Google客户端库连接到本地模拟器。

定义默认凭据

代码语言:javascript
复制
gcloud auth application-default login

或者在获得服务帐户的凭据后设置GOOGLE_APPLICATION_CREDENTIALS环境变量,如下所示

代码语言:javascript
复制
gcloud iam service-accounts keys create key.json \
    --iam-account=project-id@appspot.gserviceaccount.com

正如其他地方所建议的那样,按照ADC策略,只会导致客户机库连接到实际的云服务器,而不是本地模拟器。

我希望开发服务器能够自动向客户端库提供连接提示,但情况显然并非如此。

考虑到我们不能仅仅迁移到独立的Datastore模拟器,考虑到我们需要目前仅由App开发服务器提供的其他服务(例如,电子邮件提交),对于设置本地测试环境有任何建议吗?

编辑/经过进一步的修改后,我们将使用本地开发服务器和独立的数据存储仿真程序来解决这个问题:

代码语言:javascript
复制
gcloud beta emulators datastore start \
  —project=project-id \
  --host-port=localhost:8081 \
  --data-dir=target/war

DATASTORE_EMULATOR_HOST=localhost:8081 java_dev_appserver.sh \
 --port=8080 \
 target/war

然而,这个过程非常繁琐,也很难实现自动化:我们正在寻找的是,在使用类似于应用程序引擎Maven插件 (例如mvn appengine:run )的应用程序启动时,能够自动将Google连接到由Java8LocalDevelopmentServer管理的Datastore模拟器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 15:51:17

关闭此GitHub问题时确认数据存储客户端库与本地仿真程序不兼容。

实际上,我尝试了一下,看看是否有可能强制连接到本地Web Server。下面的代码使用所需的主机配置设置一个自定义构建器:

代码语言:javascript
复制
DatastoreOptions.Builder builder = DatastoreOptions.newBuilder();
builder.setHost("http://localhost:8080");
builder.setProjectId("<PROJECT_ID>");

Datastore ds = builder.build().getService();

Key key = ds.newKeyFactory().setKind("MyEntity").newKey("mykey");
Entity entity = Entity.newBuilder(key).set("p1", "Hello World!").build();

entity = ds.put(entity);
System.out.println(entity);

entity = ds.get(key);
System.out.println(entity);

在运行本地Web Server之后,我注意到连接确实是可能的,但是Datastore客户端库在试图存储新实体时返回了以下错误:

代码语言:javascript
复制
[INFO] GCLOUD: com.google.cloud.datastore.DatastoreException: Non-protobuf error: <html><head><title>Error 404</title></head>|<body><h2>Error 404</h2></body>|</html>. HTTP status code was 404.

Web服务器的输出如下:

代码语言:javascript
复制
Oct 02, 2019 3:05:59 PM com.google.appengine.tools.development.jetty9.LocalResourceFileServlet doGet
WARNING: No file found for: /v1/projects/<PROJECT_ID>:commit

我认为这进一步证实了新库只是与旧的模拟器不兼容。

您找到的解决方案可能是最佳解决方案,而您正在工作/等待向Datastore模式仿真器的完整迁移。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58102391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档