在没有数据库模拟器的数据库上运行firebase functions emulator(改为面向生产云)

在没有数据库模拟器的数据库上运行firebase functions emulator(改为面向生产云),firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,我在针对生产数据库运行firebase functions emulator时遇到问题。我有一个项目尚未公开发布,所以我可以运行到生产任何负面影响 我的项目只使用实时数据库,不使用Firestore(因此其他问题与此无关)。文档说明“云Firestore和实时数据库触发器已经有足够的凭据,不需要额外设置。”因此,我不需要任何额外的设置来指向生产数据库 根据Firebase上的所有文档,如果我只启动functions emulator而不启动database emulator,那么项目应该运行到真

我在针对生产数据库运行firebase functions emulator时遇到问题。我有一个项目尚未公开发布,所以我可以运行到生产任何负面影响

我的项目只使用实时数据库,不使用Firestore(因此其他问题与此无关)。文档说明“云Firestore和实时数据库触发器已经有足够的凭据,不需要额外设置。”因此,我不需要任何额外的设置来指向生产数据库

根据Firebase上的所有文档,如果我只启动functions emulator而不启动database emulator,那么项目应该运行到真正的Firebase数据库。这个警告似乎也这么说:

功能:以下模拟器未运行,从功能模拟器调用这些服务将影响生产:身份验证、firestore、数据库、主机、pubsub

然而,事实并非如此。相反,我得到了以下错误:

函数[onGlobalClientRequest]:函数被忽略,因为数据库仿真器不存在或未运行

我已经阅读了firebase文档,除了设置不需要的凭据之外,没有什么真正提到的(但在运行函数模拟器之前,我正在使用
export GOOGLE\u APPLICATION\u credentials=“/path/to/credentials.json”
设置凭据。)

OnGlobalClient任务如下所示:

export const onGlobalClientRequest = functions.database
  .ref( client_requests_key + "/{pushedid}")
  .onCreate(
    async (
      snap: functions.database.DataSnapshot,
      context: functions.EventContext,
    ) => {
      ///.... code here...
    },
  );


对实时数据库(RTDB)的操作会触发相应项目中的函数。因此,生产RTDB触发生产项目的函数,而仿真RTDB触发仿真函数

如果您想使用仿真器在本地测试由RTDB操作触发的函数,那么还必须使用RTDB仿真器。这在文件中有解释


如果您只想测试HTTP可调用函数,则可以使用远程RTDB。

本地模拟的Firebase函数将能够写入Prod数据库,但无法由生产数据库触发

下面是一位谷歌员工的一份声明,陈述了上述内容

另外,引用另一位谷歌员工的话:

一般来说,模拟器的规则是:我们全面地模拟正在运行的任何东西。因此,例如,如果您正在运行函数和数据库仿真器,则函数(通过admin.Database()..)的所有写入操作都将重定向到数据库仿真器。但对Firestore(admin.Firestore()…)的写入操作将尝试命中生产,因为仿真器未运行


我很感激你的回答,并且我已经阅读了你附加的链接,实际上看不到任何地方说函数模拟器只能与模拟数据库一起工作。附加的链接似乎只是指如何模拟数据库,但我不想这么说。我不是说你错了,只是你附加的链接没有'似乎没有明确表示函数将仅在RTDB模拟器上运行。谢谢。