swift - 如何使用 FireStore 和 Cloud 功能创建开发环境
问题描述
我一直在广泛使用 FireStore 和云功能,到目前为止一切都很好。
随着我的 Swift 应用程序接近生产发布,我想构建一个单独的开发环境。根据文档,我能够:
- 创建两个单独的项目
- 使用各种 GoogleService p-list 将这两个项目链接到我的 2 个目标
- 我还能够为我的 Firebase Function 环境声明 2 个服务帐户并创建两个单独的别名。
一切似乎都奏效了,除了我的新 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();
再次感谢弗朗索瓦
解决方案
根据以下评论进行更新,并使用您初始化应用程序的 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
推荐阅读
- javascript - 为什么JS函数不起作用?
- c++ - 复制(显式)初始化与直接(隐式)初始化 C++
- nuxt.js - Nuxt.js 不接受问题报告?
- asp.net-core - 发布依赖于第三方 dll 的框架
- javascript - 如何使用 ajax 在同一个 servlet 中实现 doPost() 和 doGet() 请求?
- reactjs - onClick 循环匹配 API 属性/产品 - ReactJS
- c# - 使用代码将材质应用于 Unity 中的所有其他对象
- javascript - 为什么 MobX 不能用作状态容器?
- python-3.x - Python 中的快速 GUID
- c++ - 将参数包解压缩到 std::initializer_list 中?