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

Deploy a Cloud Function to different Firebase projects

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

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

此时,我遇到了问题。在函数中,我必须向实时数据库写入一些内容,但是当我将函数部署到项目开发时,它会写入项目生产的数据库。

我要实现的是函数必须引用它部署到的项目的数据库。这样我就有了一个功能,当它部署到项目开发时,它写入项目开发的数据库,当它部署到项目生产时,它写入项目生产的数据库。

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

编辑

函数代码:

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);
    })
});

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

使用 firebase use --add <projektName> 添加项目后,您需要使用 firebase use <projectName> select 添加项目。然后您可以使用 firebase deployfirebase deploy --only functions.

部署到 selected 项目

这是任何想知道问题出在哪里的人的答案。

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

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