如何使用FireStore&创建开发环境云功能

时间:2018-05-29 21:22:59

标签: swift firebase google-cloud-firestore google-cloud-functions

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

当我的Swift应用程序接近生产启动时,我想构建一个单独的开发环境。根据我能够的文件:

  • 创建两个单独的项目
  • 使用各种GoogleService p-list
  • 将这两个项目链接到我的2个目标
  • 我还可以为Firebase功能环境声明2个服务帐户,并创建两个单独的别名。

这一切似乎都有效,除了我的新Dev Cloud Function环境没有与我的Dev FireStore数据库完全链接,但仍然显示仍链接到我的初始FireStore数据库实例 - 当我在其上写东西时,云功能被正确触发,但是所有的数据检索功能都返回空(就像.get()命令一样,我的" old" prod DB)。

你能不能让我知道我怎么能强迫"强迫"我的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();

再次感谢, 弗朗索瓦

1 个答案:

答案 0 :(得分:0)

更新根据以下评论以及您对帖子的更新,其中包含您初始化应用的云功能代码部分:

通过执行以下操作:

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是一个在函数运行时自动填充的环境变量。

(初步答复,与你的确切问题不完全相关......)

如果我理解得很清楚,您只需在CLI中使用use命令切换到要为其部署Cloud Function的目标Project。这是因为您登录的用户正在管理两个项目(dev和prod)。

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

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