当我运行命令 firebase deploy 时,出现此错误:
我正在部署功能
i 功能:确保启用必要的 API...
i 运行时配置:确保启用必要的 API...
✔ 运行时配置:启用所有必需的 API
✔功能:启用所有必要的API
i 函数:准备函数目录用于上传...
i 函数:用于上传的打包函数(4.04 KB)
✔functions:functions文件夹上传成功
我正在开始发布过程(可能需要几分钟)...
i 函数:创建函数 followerNotification...
⚠函数:创建函数followerNotification失败
⚠功能:HTTP错误:400,请求有错误
⚠ 功能:1 个功能部署失败。
函数部署有错误。要继续部署其他功能(例如>数据库),请运行: firebase 部署——功能除外
错误:功能未正确部署。
有麻烦吗?尝试 firebase 部署 --help
其他一切都没有问题。仅当我尝试使用 Firebase Firestore 制作某些东西时。
这也发生在我身上,然后我意识到在第二层,firestore只允许文档而不允许集合。
我试图听这条路:
/collection/document/{wildcard}
你可以做类似的事情
/collection/{wildcard}
或
/collection/document/collection/{wildcard}
我也遇到这个问题了。就我而言,这是因为我的触发路径在文档路径中有一个尾部斜杠。
如此改变:
functions.firestore
.document('some_path/{pushId}/')
致:
functions.firestore
.document('some_path/{pushId}')
帮我修好了。这似乎是由多种问题引起的,并且 firebase cli 并没有很好地解释其原因。
对我来说,所有答案都没有帮助我。最后我得到了一个步骤列表(来自谷歌)来查明问题。如果你跑步:
firebase --debug --only functions deploy
它会给出更详细的错误消息,就我而言:
HTTP RESPONSE BODY <?xml version='1.0' encoding='UTF-8'?><Error><Code>EntityTooLarge</Code><Message>Your proposed upload is larger than the maximum object size specified in your Policy Document.</Message><Details>Content-length exceeds upper bound on range</Details></Error>
好吧,这就是你需要看的。
自从你有了
exports.yourFunctionName = functions.firestore.document
你需要看的是
.document
您的路径必须指向文档而不是集合。
所以这不起作用:
/level1/{level1Id}/level2
<- it points to a collection
这个会起作用:
/level1/{level1Id}/level2/{level2Id}
云函数将查找 document 何时具有 action
希望这对任何人都有帮助
问题是您仅引用集合而不是文档,例如:
exports.myFunctionName = functions.firestore
.document('users').onWrite((event) => {
// ... Your code here
});
您需要参考以下文档:
exports.myFunctionName = functions.firestore
.document('users/marie').onWrite((event) => {
// ... Your code here
});
您还可以使用通配符,例如:
exports.myFunctionName = functions.firestore
.document('users/{userId}').onWrite((event) => {
// ... Your code here
});
这里有描述:https://firebase.google.com/docs/functions/firestore-events
希望我能帮忙
问题可能是由函数名称的长度引起的。
所以,如果名字是:
myFunctionsFromWorksWithCustumersTiggersTests
更改为较短的名称,例如:
WorkWithCustumers
我希望我有所帮助。
在尝试发布侦听云发布/订阅的函数时,我遇到了同样的错误,该函数以数字字符开头。
exports.nightly_pruning = functions.pubsub.topic('24hr-tick').onPublish((event) => {
...
});
只需更改名称即可修复此问题:
exports.nightly_pruning = functions.pubsub.topic('nightly-tick').onPublish((event) => {
...
});
(感谢上面的 Nikolai Hegelstad。我没有资格发表评论。)
我也遇到了同样的错误,直到我更改了函数名称
创建_模板_
到
创建新模板
可能是函数名末尾的“_”(下划线)导致了此错误。
我之所以遇到这种情况是因为导出函数名称开头有下划线。 你可以自己尝试一下:
exports._someLongNameWithUnderscore= functions.auth.user().onCreate(user => {
return true;
});
exports.someLongNameWithoutUnderscore= functions.auth.user().onCreate(user => {
return true;
});
exports.shortName= functions.auth.user().onCreate(user => {
return true;
});
开头或结尾带有下划线的将失败并显示
HTTP:400
,其他将部署。
如果您使用错误的 Node 版本,也可能会发生这种情况。我刚刚在处理函数时将节点版本设置为 8.x 后经历了这一点。切换回 v10.x,问题消失了。
如果有人仍然遇到此问题,就我而言,解决方案是运行
npm install -g firebase-tools
来更新 cli,并添加
"engines": {
"node": "8"
}
到 package.json
我遇到的相同错误消息是 Cloud Functions 的 pubsub 似乎不支持名称以数字字符开头的主题。
只是想指出,linter 将拒绝侦听器声明中的换行符,即:
exporst.myFunc = functions.firestore
.document('collection/{uid}')
.onEvent(...)
linter 没有多大帮助,并且文档中没有涵盖(像往常一样)
检查您的数据库区域。 该函数应部署在数据库的同一区域。 这对我有用