将 Cloud Functions 部署到不同的 Firebase 项目

时间:2021-03-11 17:10:04

标签: firebase firebase-realtime-database google-cloud-functions environment

我有两个 firebase 项目,一个用于开发 (project-dev),一个用于生产 (project-prod)。

我初始化了 firebase CLI,用于编写和部署链接到 project-prod 的云函数。然后我运行 firebase use --add 并添加了 project-dev 以便我可以将相同的功能部署到两个项目;我不想两次重写同一个函数。

此时,我遇到了问题。在函数中,我必须向实时数据库写入一些内容,但是当我将该函数部署到 project-dev 时,它会写入到 project-prod 的数据库中。

我想要实现的是该函数必须引用它所部署到的项目的数据库。这样我就有了一个函数,当它部署到 project-dev 时,它会写入 project-dev 的数据库,而当它部署到 project-prod 时,它会写入 project-prod 的数据库。

有可能实现吗?如果没有,那该怎么走?

编辑

函数代码:

exports.AddOrders= functions.https.onRequest(async (req, res) => {
    async function addOrder(key, value) {
        var ref = app.database().ref("/orders");
        return ref.child(key).set(value);
    }

    var orders = req.body['orders'];
    var promises = [];
    for (var key in orders) {
        promises.push(addOrder(key, orders[key]));
    }
    Promise.all(promises).then(
        _ => {
            res.sendStatus(200);
            return null;
        }
    ).catch(err => {
        res.send(err);
    })
});

(这个功能没问题,问题是写错了数据库)

2 个答案:

答案 0 :(得分:1)

使用 firebase use --add <projektName> 添加项目后,您需要使用 firebase use <projectName> 选择它。然后您可以使用 firebase deployfirebase deploy --only functions 部署到选定的项目。

答案 1 :(得分:0)

这是任何想知道问题所在的人的答案。

他正在使用与生产项目相关联的服务帐户的凭据初始化 admin sdk。解决方案是将其更改为 admin.initializeApp() 而不传递任何参数。这使得 Firebase 使用每个项目的默认凭据。

我知道这是一个常见的错误,但同样,这里是相应文档的链接 https://firebase.google.com/docs/admin/setup