将 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 deploy
或 firebase deploy --only functions
.
部署到 selected 项目
这是任何想知道问题出在哪里的人的答案。
他正在使用绑定到生产项目的服务帐户的凭据初始化 admin sdk。解决方案是在不传递任何参数的情况下将其更改为 admin.initializeApp()
。这使得 Firebase 使用每个项目的默认凭据。
我知道这是一个常见的错误,但这里是相应文档的 link https://firebase.google.com/docs/admin/setup
我有两个 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 deploy
或 firebase deploy --only functions
.
这是任何想知道问题出在哪里的人的答案。
他正在使用绑定到生产项目的服务帐户的凭据初始化 admin sdk。解决方案是在不传递任何参数的情况下将其更改为 admin.initializeApp()
。这使得 Firebase 使用每个项目的默认凭据。
我知道这是一个常见的错误,但这里是相应文档的 link https://firebase.google.com/docs/admin/setup