【发布时间】:2020-09-16 17:17:46
【问题描述】:
我正在尝试将更大的规则文件部署到 Firestore。规则文件目前为 55KB(远低于 Firestore 列出的 256KB 限制)。每次我尝试使用此命令自行部署规则时...
firebase deploy --only firestore:rules --debug
我收到此错误...
Error: HTTP Error: 400, Request contains an invalid argument.
[2020-09-13T19:29:41.552Z] Error Context: {
"body": {
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
},
"response": {
"statusCode": 400,
"body": {
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
},
"headers": {
"vary": "X-Origin, Referer, Origin,Accept-Encoding",
"content-type": "application/json; charset=UTF-8",
"date": "Sun, 13 Sep 2020 19:29:41 GMT",
"server": "ESF",
"cache-control": "private",
"x-xss-protection": "0",
"x-frame-options": "SAMEORIGIN",
"x-content-type-options": "nosniff",
"alt-svc": "h3-29=\":443\"; ma=2592000,h3-27=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
"accept-ranges": "none",
"transfer-encoding": "chunked"
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "firebaserules.googleapis.com",
"port": 443,
"hostname": "firebaserules.googleapis.com",
"hash": null,
"search": null,
"query": null,
"pathname": "/v1/projects/brianneisler-test:test",
"path": "/v1/projects/brianneisler-test:test",
"href": "https://firebaserules.googleapis.com/v1/projects/brianneisler-test:test"
},
"method": "POST"
}
}
}
我进行了一次测试,我注释掉了所有规则代码,然后根据依赖关系慢慢取消注释部分代码(寻找有问题的行)。但是,我注意到,随着我取消注释的代码越来越多,问题开始更频繁地发生。起初它会失败五分之一。取消注释更多代码,开始更频繁地失败。这让我相信 Firebase 方面存在某种基于编译时间的竞争条件,因为文件的大小保持不变,只有未注释的代码发生了变化。
我已联系 Firebase 的支持团队,他们已确认规则本身没有错误。他们已经能够重现该错误,但他们关于如何解决该问题的建议没有奏效。这是我从他们的支持团队收到的回复。
感谢您提供详细信息。我使用您共享的规则进行了一些测试,似乎规则具有正确的语法,但是在 Firebase 控制台中一次更新的规则太多。
一个选项是分块上传规则。首先,尝试上传规则的前 1500 行并发布规则。之后加上剩下的代码行,应该是400了,再次发布规则,这次应该不会报错了。
我还尝试使用 Firebase CLI 部署规则。当我第一次尝试部署这些功能时,它向我显示了与您相同的错误,但我尝试再次部署这些功能并且它正确地完成了。
很明显,他们遇到了同样的问题,偶尔会失败。
有没有其他人遇到过这个问题并想出了解决方法?
【问题讨论】:
-
据我所知,唯一的解决方法是 Firebase 团队提到的部分上传,以避免问题,正如他们所提到的,它确实与文件的大小有关/行数。我相信没有什么可以做的,因为它是支持提供的官方解决方案/替代方案。
-
这还有问题吗? 256KB 限制不是真正的 256KB 限制?
标签: firebase google-cloud-firestore firebase-security