我正在部署Firebase云功能,以通过连续部署来监听Firestore中的更改。
我只能找到一种激活重试manually的方法。这与我们的CD方法背道而驰。
看普通的gcp cloud functions,可以在部署时给出重试标志。但是我在firebase-cli或firebase-functions界面(2.1.0)中找不到类似的选项
关于如何解决此问题的任何提示? 卡斯滕
答案 0 :(得分:2)
当前没有使用Firebase CLI进行部署的类似选项。
这是Firebase团队正在处理的事情,请随时关注更新。
答案 1 :(得分:2)
您可以手动使用GCloud Console在Firebase Functions中启用重试。在firebase-functions
3.10.0中添加了以编程方式重试基于触发器的功能(请参阅changelog和相关的pull request)。
由于从PR或文档中并不完全清楚,因此下面是该语法的快速示例:
export const myFirebaseFunc = functions
.runWith({
failurePolicy: {
retry: {},
},
memory: '512MB',
timeoutSeconds: 60,
})
.firestore.document('/path/to/some/doc')
.onCreate(async (snap, context) => {
/* do stuff */
})
现在,看来故障策略只是打开还是关闭。因此,这是等效的
export const myFirebaseFunc = functions
.runWith({
failurePolicy: true,
memory: '512MB',
timeoutSeconds: 60,
})
.firestore.document('/path/to/some/doc')
.onCreate(async (snap, context) => {
/* do stuff */
})
一些警告:
您还必须使用--force
您只能在触发的功能上启用重试,而不能在http调用的功能上启用重试。
不建立某些保护措施将是愚蠢的。重试策略将在7天后用尽,并且会像其他任何函数调用一样收费,因此,如果您遇到一些未处理的错误,它可能会重复运行整整一周。您可以使用context.eventTimestamp
来了解首次尝试的大致时间。
请阅读:https://firebase.google.com/docs/functions/retries,并确保您的函数是幂等的。
也很难发现要返回的内容以强制重试或避免重试。 已触发的Firebase函数必须返回Promise。(请参阅此vid)
启用重试的Firebase功能将在以下情况下重试:
这意味着,如果遇到错误,并且您知道最终不会通过重试来解决自身(即,您想停止执行函数而不是重试),则可以返回Promise.resolve({message: 'some message'});