【发布时间】:2018-06-24 21:05:11
【问题描述】:
我构建了一个小型 Go 应用程序,用于 AppEngine。我通过 go run .. 在本地运行 go,我正在尝试使用数据存储。
我通过gcloud beta emulators datastore start 在本地运行数据存储模拟器,并通过导出DATASTORE_EMULATOR_HOST go 应用程序可以在本地连接到它。
所以我使用cloud.google.com/go/datastore 构建了我的应用程序,但是当我将它部署到 AppEngine 时,任何连接到数据存储区的 go 代码似乎都会使整个应用程序因超时而失败。
在尝试对此进行调试时,我遇到了使用 google.golang.org/appengine/datastore 的代码并编写了一些测试代码,我得到了在 AppEngine 上工作的东西。
但是,这个datastore 似乎无法连接到数据存储模拟器。
- 是否有人在使用
cloud.google.com/go/datastore时遇到超时问题?我似乎读到了人们说出于某种原因使用 this 包而不是 golang.org 包的不同答案。 - 我可以在 AppEngine 上使用
cloud.google.com/go/datastore吗?我更喜欢使用这个包,因为它适用于数据存储模拟器。
简而言之,我正在使用以下代码:
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
任何帮助将不胜感激。
【问题讨论】:
标签: google-app-engine go google-cloud-datastore