【问题标题】:Python firebase_admin hangs when connecting to firestore emulator连接到 Firestore 模拟器时 Python firebase_admin 挂起
【发布时间】:2021-09-17 04:16:29
【问题描述】:

我无法从 python 连接到 Firestore 模拟器。将文档连接并写入真实项目可以正常工作,但是在设置 env 时。设置函数永远不会解析变量“FIRESTORE_EMULATOR_HOST”。代码:

os.environ["FIRESTORE_EMULATOR_HOST"]="localhost:8081"
os.environ["GCLOUD_PROJECT"]="my_project"
cred = credentials.Certificate('./firebase_cert.json')

default_app = firebase_admin.initialize_app(cred)
db = firestore.client()

doc_ref = db.collection(u'test').document()
doc_ref.set({
    u'hello': "test"
})

print("Document stored successfully.")

我的 firebase.json:

{
    "emulators": {
        "firestore": {
           "port": 8081
          },
         "ui": {
         "enabled": true
     } }
  }

这是什么原因造成的?

更新: 我尝试了不同的方法来确定这是否是端口问题,并在 firebase-debug.log 中得到以下信息。

  1. 在 firebase.json 中设置端口为 8080:

    2021 年 7 月 8 日下午 12:42:50 io.gapi.emulators.netty.NotFoundHandler handleRequest 信息:未知请求 URI:/app/agents/protocols

  2. 在 firebase.json 中设置端口为 8081:

    2021 年 7 月 8 日 12:42:00 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead 信息:检测到非 HTTP/2 连接。

  3. 在 firebase.json 中根本没有设置端口(强制默认端口)

    2021 年 7 月 8 日下午 12:46:06 io.gapi.emulators.netty.NotFoundHandler handleRequest 信息:未知请求 URI:/app/agents/protocols

我深入研究了 google cloud 包,发现代码至少执行到这一点(venv/Lib/site-packages/google/cloud/firestore_v1/services/firestore/client.py 中的第 821 行):

response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,)

【问题讨论】:

  • 我运行了你的代码,它对我有用。我的猜测是,您正在运行的模拟器可能不在端口 8081 上?如果端口不匹配,Python 脚本确实会停止。假设模拟器上的默认端口是 8080,可能你的模拟器没有从 json 文件中获取更改的端口?
  • 尝试了不同的端口设置来确定这是否是问题所在,仍然是同样的问题。查看更新的问题。
  • 我没有想法。我的最后一个建议是删除所有内容并重新开始。可能在您之前的设置中没有正确配置。
  • 这里也一样。谢谢你的时间。

标签: python firebase google-cloud-firestore


【解决方案1】:

firebase-admin SDK 从5.0.2 降级到4.5.1,降级解决了我的问题。

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2020-12-26
    • 2020-06-17
    • 2020-06-19
    • 2020-07-07
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多