我有一个Firebase应用程序,该应用程序使用Cloud Functions与Google Cloud SQL实例进行对话。这些云功能用于执行CRUD操作。我想确保数据库反映出CRUD操作,因此,每次我推送新功能代码时都要运行迁移代码,以确保数据库始终是最新的。
我在全局函数中执行此操作
const functions = require('firebase-functions')
const pg = require('pg')
// Create if not exists database
(function() {
console.log('create db...')
})()
exports.helloWorld = functions.https.onRequest((request, response) => {
console.log('Hello from Firebase function log!')
response.send('Hello from Firebase!')
})
exports.helloWorld2 = functions.https.onRequest((request, response) => {
console.log('Hello from Firebase function log 2!')
response.send('Hello from Firebase 2!')
})
此控制台日志随后在部署时运行两次。
现在我了解到,无法了解Cloud Functions将为该函数启动多少个实例,如其文档所述:
函数文件中的全局范围(预期包含函数定义)在每次冷启动时执行,但是如果实例已经初始化,则不会执行。
如果添加第三个功能,则此控制台日志现在在日志中显示3次,而不是2次,每个功能一次。 说每个上载的函数都有一个新实例是正确的吗?我试图了解上载一组云函数时幕后发生的事情。
如果是这样-是否没有可靠的方法在云函数的全局函数中运行迁移代码?
答案 0 :(得分:1)
您正在执行的操作不是Cloud Functions支持的用例。运行Cloud Functions代码以响应项目中发生的事件。部署时不会发生“一次性”功能调用。如果您需要一次运行代码,只需在台式机或您控制的其他服务器上运行代码即可。
您还应该努力最大程度地减少在函数的全局范围内发生的工作量。全局变量将被实例化并针对您应用中的每个功能运行一次,因为每个功能彼此完全隔离运行,并且每个功能都有自己的副本。观看有关function scaling and isolation的视频,以更好地了解这种行为。