gpt4 book ai didi

google-app-engine - 在 AppEngine 上运行时,将 Cloud Firestore 与 AppEngine Go 标准环境一起使用会返回 rpc 错误

转载 作者:IT王子 更新时间:2023-10-29 01:35:03 24 4
gpt4 key购买 nike

我正在尝试在用 Go 编写的 AppEngine(标准环境)应用程序中使用 Firestore。我一直在遵循“Getting Started with Cloud Firestore" 指南,并一直在使用 firestore package 文档来实现一个简单的示例,该示例在我的本地开发服务器上运行时运行良好。

然而,当我部署应用程序并尝试部署版本时,调用 DocumentRef.Set()因错误而失败

rpc error: code = Unavailable desc = all SubConns are in TransientFailure

这是我重现问题的代码:

func init() {
http.HandleFunc("/test", testHandler)
}

type testData struct {
TestData string `firestore:"myKey,omitempty"`
}

func testHandler(w http.ResponseWriter, r *http.Request) {
ctx := appengine.NewContext(r)

var firestoreClient *firestore.Client
var firebaseApp *firebase.App
var err error

conf := &firebase.Config{ProjectID: "my-project"}
firebaseApp, err = firebase.NewApp(ctx, conf)

if err != nil {
fmt.Fprintf(w, "Failed to create a new firestore app: %v", err)
return
}

firestoreClient, err = firebaseApp.Firestore(ctx)
if err != nil {
fmt.Fprintf(w, "Failed to create a new firestore client: %v", err)
return
}

data := testData{"my value"}
_, err = firestoreClient.Collection("testCollection").Doc("testDoc").Set(ctx, data)
if err != nil {
fmt.Fprintf(w, "Failed to create a firestore document: %v", err)
return
}
firestoreClient.Close()
fmt.Fprint(w, "Data stored in Firestore successfully")
}

如前所述,这在开发服务器上运行良好。因此,返回的页面包含文本 Data stored in Firestore successfully

运行已部署的代码时,我得到的是 Failed to create a firestore document: rpc error: code = Unavailable desc = all SubConns are in TransientFailure。为什么会出现此错误,如何避免?

最佳答案

我提出了一个issue关于这个在 Firestore 客户端库问题跟踪器中,看起来情况有点复杂。

使用 App Engine 时,Firestore 客户端库的网络连接通过 App Engine socket library .但是套接字仅适用于 paid App Engine apps :

Sockets are only available for paid apps, and traffic from sockets is billed as outgoing bandwidth. Sockets are also limited by daily and per minute (burst) quotas.

所以这就是Firestore客户端库失败的原因。对于小型项目,可以为您的 App Engine 应用程序启用计费,并且仍然保持在免费范围内。如果启用计费,它也应该在部署应用程序时起作用。

但是,如果您居住在欧盟境内,则由于 Google policies,您不得拥有用于非商业目的的付费 App Engine 应用程序。 :

If you are located in the European Union and the sole purpose for which you want to use Google Cloud Platform services has no potential economic benefit you should not use the service. If you have already started using Google Cloud Platform, you should discontinue using the service. See Create, modify, or close your billing account to learn how to disable billing on your projects.

因此,如果您在欧洲或出于某些其他原因无法使用付费的 App Engine 应用程序,您将无法使用 Firestore 客户端库。

在这种情况下,一种替代方法是使用 Firestore REST API而是手动向 Firestore 发出 HTTP 请求。这需要更多的工作,但对于较小规模的项目来说它很管用。

关于google-app-engine - 在 AppEngine 上运行时,将 Cloud Firestore 与 AppEngine Go 标准环境一起使用会返回 rpc 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47663044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com