Google Cloud Functions Cron 作业不工作

Posted

技术标签:

【中文标题】Google Cloud Functions Cron 作业不工作【英文标题】:Google Cloud Functions Cron Job Not Working 【发布时间】: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 调用运行计划的云功能。 我应该注意,我仍然希望得到这个问题的答案——即使另一个问题得到了正确的回答。正如我在之前的评论中指出的那样,他们在问两个不同的问题。因此,你能重新打开这个问题吗?谢谢。 完成。很抱歉这个错误,因为这确实是一个与我链接的问题不同的问题。 谢谢——不用担心。我意识到标题非常相似——我的标题应该更清楚。 【参考方案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 文件中

以上是关于Google Cloud Functions Cron 作业不工作的主要内容,如果未能解决你的问题,请参考以下文章

? Google Cloud Functions ?????? MongoDB Atlas ??

Google Cloud Functions 部署问题

如何从 Cloud Functions 连接 Google Cloud SQL?

Google Cloud Functions 通知 iOS

Google Cloud Functions Cron 作业不工作

在本地测试 Python Google Cloud Functions