【问题标题】:Firestore uploading larger rules file results in "Error: 400, Request contains an invalid argument."Firestore 上传较大的规则文件会导致“错误:400,请求包含无效参数”。
【发布时间】: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


【解决方案1】:

当前的解决方法

如果我使用firemin 规则缩小器最小化规则,部署成功率更高。这是有道理的,因为它折叠了单次使用的函数并总体上减小了规则文件的大小。

【讨论】:

  • 感谢分享。这里有一些关于文件大小限制的有趣信息:firebase.googleblog.com/2020/06/…。摘录:“更具体地说,规则文件的编译 AST 必须小于 64 KB”。所以听起来文件限制是在Firebase编译文件之后。缩小还有优势吗?
猜你喜欢
  • 2018-09-25
  • 1970-01-01
  • 2019-05-10
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多