【发布时间】: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 中得到以下信息。
-
在 firebase.json 中设置端口为 8080:
2021 年 7 月 8 日下午 12:42:50 io.gapi.emulators.netty.NotFoundHandler handleRequest 信息:未知请求 URI:/app/agents/protocols
-
在 firebase.json 中设置端口为 8081:
2021 年 7 月 8 日 12:42:00 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead 信息:检测到非 HTTP/2 连接。
-
在 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