首页 > 解决方案 > 如何使用 FireStore 和 Cloud 功能创建开发环境

问题描述

我一直在广泛使用 FireStore 和云功能,到目前为止一切都很好。

随着我的 Swift 应用程序接近生产发布,我想构建一个单独的开发环境。根据文档,我能够:

一切似乎都奏效了,除了我的新 Dev Cloud Function 环境没有与我的 Dev FireStore DB 完全链接,而是似乎仍然链接到我的初始 FireStore DB 实例 - 当我在上面写一些东西时,云功能被正确触发,但是所有数据检索函数返回空(好像 .get() 命令针对我的“旧”产品数据库)。

您能否告诉我如何“强制”我的 Dev Cloud Functions 环境与我的 Dev FireStore 数据库实例链接?我一定错过了一步 - 例如,我没有重新初始化 CLI/重新登录等,但只创建了第二个别名。

我也收到此消息:“未配置计费帐户。无法访问外部网络并且配额受到严重限制。配置计费帐户以删除这些限制”。这很奇怪,因为我没有使用外部帐户(仅限 Firestore/Cloud Functions/FCM)。

您可以指出的任何文档/分步指南都会非常有帮助!

这是我初始化我的 2 个应用程序的方法:

const functions = require('firebase-functions');

const admin = require('firebase-admin');

var serviceAccount = require("./adminKey.json");
var serviceAccountDev = require("./adminKey-dev.json");

var secondEnvironment = admin.initializeApp({
  credential: admin.credential.cert(serviceAccountDev),
  databaseURL: "https://<app name>-dev.firebaseio.com"
}, 'dev instance');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<app name>.firebaseio.com"
});

var db = admin.firestore();

再次感谢弗朗索瓦

标签: swiftfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


根据以下评论进行更新,并使用您初始化应用程序的 Cloud Function 代码部分更新您的帖子

通过执行以下操作:

var secondEnvironment = admin.initializeApp({
  credential: admin.credential.cert(serviceAccountDev),
  databaseURL: "https://<app name>-dev.firebaseio.com"
}, 'dev instance');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<app name>.firebaseio.com"
});

您正在使用两个环境的 Prod 环境参数初始化应用程序。

您应该按照本文档项底部的说明进行操作:https ://firebase.google.com/docs/functions/config-env#automatically_populated_environment_variables

这是:

如果您需要使用服务帐户凭据使用默认项目配置初始化 Admin SDK,您可以从文件加载凭据并将它们添加到 FIREBASE_CONFIG,如下所示:

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG); adminConfig.credential = admin.credential.cert(serviceAccount); admin.initializeApp(adminConfig);

process.env.FIREBASE_CONFIG是在函数运行时自动填充的环境变量。


(最初的答案,不再与您的确切问题完全相关......)

如果我理解得很好,您只需use在 CLI 中使用命令切换到要为其部署云功能的目标项目。这是为了以防您登录的用户正在管理两个项目(dev 和 prod)。

如果两个不同的用户管理这两个项目,您必须使用logout命令后跟一个login命令才能使用正确的用户登录(use如果用户管理多个项目,则可能随后使用该命令)。

请参阅此处的文档:https ://firebase.google.com/docs/cli/#administrative_commands


推荐阅读