本地模拟器分布式计数器扩展的实现
Implementation of Distributed-Counter-Extension for local emulator
distributed counter 的 firebase 扩展可以直接安装在云端并且工作正常。要为应用程序开发新功能,我需要在模拟器上执行此操作以不中断 运行 服务器。
因为 Firebase 扩展只是扩展本身的云功能, I thought about implementing the cloud function in my emulator by getting the source code。到目前为止,这对其他扩展工作得很好...
实施时出现错误和功能障碍
在实施 javaScript 版本时出现以下错误:
function ignored because the unknown emulator does not exist or is not running.
这个问题可以通过重写 index.js
函数的导出行来解决,但无论如何都不会提供扩展的预期功能:
exports.worker = functions.handler.firestore.document.onWrite(async (change, context) => {...});
到
exports.worker = functions.firestore.document("").onWrite(async (change, context) => {...});
问题
我是否遗漏了一些实现或缺少模拟器?我如何实施此 Firestore 扩展?
有一些类似的问题,但不真正谈论整个扩展的实现:
Applying a Distributed Counter to Cloud Code
firebase distributed counter extension in cloud functions
firebaser 在这里
Firebase Extensions 通常在 extension.yaml 文件中声明它们的触发器,而不是在代码本身中。因此,为了以这种方式模拟扩展,您需要将触发器移至代码中。
对于您的'worker'函数的具体示例,扩展声明了要收听的文件here,因此我们将文件复制到代码中:
exports.worker = functions.firestore.document(`${process.env.INTERNAL_STATE_PATH}/workers/{workerId}`).onWrite(async (change, context) => {...});
您必须对扩展中的每个其他后台触发函数执行相同的操作 - 在 extension.yaml 中找到触发器并将其移至代码中。
您还需要提供通常用于配置扩展的参数值作为环境变量。为此,您必须将 .env
文件添加到包含您要设置的环境变量的函数目录。对于您的情况,它看起来像:
LOCATION=//Put your location here
INTERNAL_STATE_PATH=//Put your path here
SCHEDULE_FREQUENCY=1
然后,您需要启用模拟器来读取此文件:
firebase --open-sesame dotenv
然后,你应该可以运行模拟器中的扩展代码。
您可能会想,现在这不是一个很容易的过程。我们目前正致力于为 Firebase 模拟器套件添加对扩展的原生支持。一旦可用,我一定会回到这里并更新此答案以说明如何使用它,希望这对您来说会容易得多!
PS:如果您有兴趣帮助我们尽早测试此功能,请告诉我,我们会在准备好测试后立即与您联系。
distributed counter 的 firebase 扩展可以直接安装在云端并且工作正常。要为应用程序开发新功能,我需要在模拟器上执行此操作以不中断 运行 服务器。
因为 Firebase 扩展只是扩展本身的云功能
实施时出现错误和功能障碍
在实施 javaScript 版本时出现以下错误:
function ignored because the unknown emulator does not exist or is not running.
这个问题可以通过重写 index.js
函数的导出行来解决,但无论如何都不会提供扩展的预期功能:
exports.worker = functions.handler.firestore.document.onWrite(async (change, context) => {...});
到
exports.worker = functions.firestore.document("").onWrite(async (change, context) => {...});
问题
我是否遗漏了一些实现或缺少模拟器?我如何实施此 Firestore 扩展?
有一些类似的问题,但不真正谈论整个扩展的实现:
Applying a Distributed Counter to Cloud Code
firebase distributed counter extension in cloud functions
firebaser 在这里
Firebase Extensions 通常在 extension.yaml 文件中声明它们的触发器,而不是在代码本身中。因此,为了以这种方式模拟扩展,您需要将触发器移至代码中。
对于您的'worker'函数的具体示例,扩展声明了要收听的文件here,因此我们将文件复制到代码中:
exports.worker = functions.firestore.document(`${process.env.INTERNAL_STATE_PATH}/workers/{workerId}`).onWrite(async (change, context) => {...});
您必须对扩展中的每个其他后台触发函数执行相同的操作 - 在 extension.yaml 中找到触发器并将其移至代码中。
您还需要提供通常用于配置扩展的参数值作为环境变量。为此,您必须将 .env
文件添加到包含您要设置的环境变量的函数目录。对于您的情况,它看起来像:
LOCATION=//Put your location here
INTERNAL_STATE_PATH=//Put your path here
SCHEDULE_FREQUENCY=1
然后,您需要启用模拟器来读取此文件:
firebase --open-sesame dotenv
然后,你应该可以运行模拟器中的扩展代码。
您可能会想,现在这不是一个很容易的过程。我们目前正致力于为 Firebase 模拟器套件添加对扩展的原生支持。一旦可用,我一定会回到这里并更新此答案以说明如何使用它,希望这对您来说会容易得多!
PS:如果您有兴趣帮助我们尽早测试此功能,请告诉我,我们会在准备好测试后立即与您联系。