Google Cloud Functions Cron 作业不工作:“函数被忽略,因为 pubsub 模拟器不存在或未运行”

问题描述 投票:0回答:2

我正在尝试在 Firebase Cloud Functions 中设置计划函数。作为一个简单的测试,我尝试重新创建文档页面上显示的示例:

const functions = require('firebase-functions')

exports.scheduledFunction = functions.pubsub
  .schedule('every 5 minutes')
  .onRun(context => {
    console.log('This will be run every 5 minutes!')
    return null
  })

但是,当我运行

firebase serve --only functions
时,出现以下错误:

函数被忽略,因为 pubsub 模拟器不存在或未运行。

知道为什么我会收到此消息以及如何修复它吗?

firebase google-cloud-functions google-cloud-pubsub firebase-tools
2个回答
17
投票

来自 Firebase 本地模拟器的文档:

Firebase CLI 包含一个 Cloud Functions 模拟器,可以模拟以下函数类型:

  • HTTPS功能
  • 可调用函数
  • Cloud Firestore 功能

因此本地 Firebase 模拟器当前不支持 pubsub,错误消息似乎证实了这一点。因此,目前您无法在本地运行 pubsub 触发的 Cloud Functions。

已提交“向模拟器添加 PubSub 支持”的功能请求。您可能想在那里阅读(并可能发表评论),因为所采取的方向可能符合也可能不符合您的需求。 本地 shell

支持

调用 pubsub 函数。这当然是完全不同的,但目前可能作为一种解决方法很有用。

对于它的价值,您需要在 firebase 中启用 pubsub 模拟器。将其添加到您的模拟器块中:

10
投票
{ "emulators": { "pubsub": { "port": 8085 }, } }

即便如此,它也只是创建了定义。模拟器不支持按计划运行该功能。
为了模拟该行为,我定义了一个 HTTP 触发器,在其中手动向主题发送消息。对于计划主题,它是 

firebase-schedule-

。在您的情况下,它将是 firebase-schedule-scheduledFunction 示例代码如下所示:

const pubsub = new PubSub() export const triggerWork = functions.https.onRequest(async (request, response) => { await pubsub.topic('firebase-schedule-scheduledFunction').publishJSON({}) response.send('Ok') })

然后在命令行上,我按计划触发 HTTP 函数。
while [ 1 ];
  do wget -o /dev/null -O /dev/null http://localhost:5001/path/to/function/triggerWork;
  sleep 300;
done


© www.soinside.com 2019 - 2024. All rights reserved.