google-app-engine - google.golang.org/appengine/datastore 与 cloud.google.com/go/datastore
问题描述
我构建了一个小型 Go 应用程序,用于 AppEngine。我在本地运行 go go run ..
,我正在尝试使用数据存储。
我通过本地运行数据存储模拟器,gcloud beta emulators datastore start
并通过导出DATASTORE_EMULATOR_HOST
go 应用程序可以在本地连接到它。
因此,我使用 构建了我的应用程序cloud.google.com/go/datastore
,但是当我将其部署到 AppEngine 时,任何连接到数据存储区的 go 代码似乎都会使整个应用程序因超时而失败。
在尝试调试时,我遇到了使用google.golang.org/appengine/datastore
和编写一些测试代码的代码,我得到了在 AppEngine 上工作的东西。
但是,此数据存储似乎无法连接到数据存储模拟器。
- 有人在使用时遇到超时问题
cloud.google.com/go/datastore
吗?我似乎读到了人们说出于某种原因使用这个包而不是 golang.org 包的不同答案。 - 我可以
cloud.google.com/go/datastore
在 AppEngine 上使用吗?我更喜欢使用这个包,因为它适用于数据存储模拟器。
简而言之,我正在使用以下代码:
import "cloud.google.com/go/datastore"
...
ctx := appengine.NewContext(r)
...
client, err := datastore.NewClient(dsCtx, projectID)
...
key := datastore.IDKey(TestKind, testID, nil)
err = client.Get(ctx, key, &data)
这是在 AppEngine 上超时的代码,但在本地运行良好。
同样适用于 AppEngine 的代码是这样的:
import "google.golang.org/appengine/datastore"
...
ctx := appengine.NewContext(r)
key := datastore.NewKey(ctx, TestKind, "", testID, nil)
err := datastore.Get(ctx, key, &data)
这将在本地失败,原因如下:
Metadata fetch failed: Get http://metadata/computeMetadata/v1/instance/attributes/gae_project: dial tcp: lookup metadata: no such host
任何帮助将非常感激。
解决方案
从App Engine Cloud Datastore 概述中的使用 App Engine 连接到 Cloud Datastore部分:
您不能在 App Engine 标准环境中将 Cloud Datastore 客户端库与 Go 应用程序一起使用。
基本上,用于在 App Engine 标准环境之外cloud.google.com/go/datastore
使用 Cloud Datastore 。这包括非 App Engine 环境以及 App Engine 柔性环境。
google.golang.org/appengine/datastore
用于在 App Engine 标准环境中使用它。
对于 App Engine 标准环境的本地测试,请考虑使用dev_appserver.py--support_datastore_emulator
,它通过标志提供与 Cloud Datastore 模拟器的集成。
推荐阅读
- mysql - sql中select distinct id和select distinct *之间的区别
- amp-html - 在 amp 中使用只读模式验证输入字段
- c# - 如何在 WPF GUI(列表视图)中查看 CSV 文件?
- java - wrap_content in a resource file behaving like match_parent
- javascript - 谷歌地图自动填充 - 仅限城市和邮政编码
- python - 如何使用熊猫重命名excel工作表中的空列
- sql - 加入三个表以返回单行半逗号分隔
- javascript - 在 UI5 中使用格式化程序功能后视图未呈现
- ruby-on-rails - 为 Rails 应用程序建立模型关联
- android - 处理程序没有按分钟指定执行运行方法?