我构建了一个小型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上工作。
但是,这个数据存储区似乎无法连接到数据存储区模拟器。
cloud.google.com/go/datastore
时是否有人遇到超时问题?我似乎读了一些不同的答案,人们说出于某种原因而使用 this 软件包,而不是golang.org软件包。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
任何帮助将不胜感激。
答案 0 :(得分:3)
来自Connecting to Cloud Datastore with App Engine section in the App Engine Cloud Datastore Overview:
您不能将Cloud Datastore客户端库与Go应用程序一起使用 在App Engine标准环境中。
cloud.google.com/go/datastore
基本上是用于在App Engine标准环境之外的 Cloud数据存储。这包括非App Engine环境以及App Engine灵活环境。
google.golang.org/appengine/datastore
用于在App Engine标准环境中的 。
对于App Engine标准环境的本地测试,请考虑使用dev_appserver.py,它通过--support_datastore_emulator
标志与Cloud Datastore仿真器集成。