我正在为一个项目使用firebase,并且正在使用下面的代码创建一个调度函数。我想每一分钟都记录一条信息。
export const timedQuery = functions.pubsub.schedule('1 * * * *').onRun((context) => {
console.log("I am running")
return null;
})我有在http函数下工作的代码的主要逻辑,并且希望在部署到生产之前看看这在本地是否有效。通过查看firebase文档,我下载了所有的firebase模拟器,并使用"firebase模拟器:start“来运行它们。从日志中看,看起来我的pubsub仿真器在localhost上成功启动:8085,并且pubsub函数被初始化,但是即使在等待2-3分钟之后,也没有输出任何输出。是否可以在本地测试预定的函数?
而且,我创建这个程序时没有使用google云调度器,因为我只是在防火墙上。
发布于 2020-04-16 15:20:20
Firebase本地模拟器目前并不模拟实际的计划函数。文档说:
Firebase CLI包括一个云函数仿真器,它可以模拟以下函数类型:
我建议向火力支援提交一个特性请求。
部署计划函数时,实际上是在幕后使用。细节是为您管理的。如文档所述
如果您想安排函数在指定时间运行,请使用functions.pubsub.schedule().onRun()这个方便的方法创建一个Google /Sub主题,并使用Google触发该主题上的事件,确保您的函数按照所需的时间表运行。
我建议将函数的代码重构为可以通过直接使用您选择的测试框架调用它来测试的方法。您还可以将其临时包装在HTTP函数中,并以这种方式调用它。
发布于 2020-04-30 14:08:29
实际上,有一个Firebase PubSub模拟器。要启用它,您需要安装最近的CLI (它肯定在8.2.0中)
在本地创建一个测试脚本,将PubSub消息提交到队列中:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const { PubSub } = require('@google-cloud/pubsub');
const pubsub = new PubSub();
exports.pubsubWriter = functions.https.onRequest(async (req, res) => {
console.log("Pubsub Emulator:", process.env.PUBSUB_EMULATOR_HOST);
const msg = await pubsub.topic('test-topic').publishJSON({
foo: 'bar',
date: new Date()
}, { attr1: 'value' });
res.json({
published: msg
})
});发布于 2021-10-03 10:59:44
解决办法
PubSub模拟器仍然不支持预定的函数。
但是您可以使用firebase functions:shell和setInterval来模拟调度程序。
备注:请确保您正在本地运行firebase模拟器,否则shell可能会调用Production中的函数!
firebase functions:shell
firebase > setInterval(() => yourScheduledFunc(), 60000)不要退出,它将每隔60运行一次函数。
注意到:在shell中运行的函数不会显示在模拟器的日志中。
https://stackoverflow.com/questions/61253788
复制相似问题