【问题标题】:Google Cloud Functions Cron Job Not WorkingGoogle Cloud Functions Cron 作业不工作
【发布时间】:2020-04-08 07:07:25
【问题描述】:

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

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 时,我收到以下错误:

function ignored because the pubsub emulator does not exist or is not running.

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

【问题讨论】:

  • 这不是一个重复的问题。这个问题询问为什么我不能使用firebase serve 命令运行计划的云功能。另一个问题是询问如何通过 api 调用运行计划的云功能。
  • 我应该注意,我仍然希望得到这个问题的答案——即使另一个问题得到了正确的回答。正如我在之前的评论中指出的那样,他们在问两个不同的问题。因此,你能重新打开这个问题吗?谢谢。
  • 完成。很抱歉这个错误,因为这确实是一个与我链接的问题不同的问题。
  • 谢谢——不用担心。我意识到标题非常相似——我的标题应该更清楚。

标签: firebase google-cloud-functions google-cloud-pubsub firebase-tools


【解决方案1】:

来自Firebase's local emulator上的文档:

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

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

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

已提交adding PubSub support to the emulator 的功能请求。您可能想在那里阅读(并可能发表评论),因为所采取的方向可能符合您的需求,也可能不符合您的需求。

本地外壳确实支持invoking pubsub functions。这当然是完全不同的,但目前可能作为一种解决方法有用。

【讨论】:

  • 谢谢——这就是我需要知道的。非常感谢。
【解决方案2】:

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

{
  "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

【讨论】:

  • 这对我真的很有帮助!对于其他遇到问题的人,pubsub 主题的新约定是 firebase-scheduled-- 例如firebase-scheduled-scheduledFunctionCrontab-us-east1。 firebase.google.com/docs/functions/schedule-functions
  • 我应该为模拟器/pubsub 设置编辑什么文件?
  • @MarkChoi 和其他想编辑哪个文件的人,您应该将其添加到 firebase.json 文件中
猜你喜欢
  • 2020-04-08
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2014-11-22
  • 2012-02-18
  • 1970-01-01
  • 2020-03-13
相关资源
最近更新 更多