Heroku Schedule开始运行功能,然后退出

时间:2019-05-03 04:23:23

标签: javascript node.js heroku hosting scheduler

问题

我在Heroku上部署了一个节点应用程序,并且由于node-cron无法与Heroku一起使用,因此我试图使用Heroku Scheduler执行任务。

调度程序运行,但是它始终以代码0退出。错误消息的图片如下。

Heroku Error Code

我已经进行了4个小时的研究,没有运气,所以如果有人有任何令人惊奇的建议!

代码

这是我与Heroku Scheduler一起使用的文件中的代码。我安排它每10分钟运行一次。 getActiveComps函数从节点应用程序中的另一个文件中调用一个函数,该函数调用外部API,然后通过Mongoose将数据写入MongoDB。

#!/app/.heroku/node/bin/node
const getActiveComps = require('../api/functions/schedulerFunctions.js');
console.log('scheduler ran');


(async () => {
  console.log('before');
  await getActiveComps();
  console.log('after');
})();

1 个答案:

答案 0 :(得分:0)

我从未解决过在预定作业中运行异步功能的问题,但我做了解决方法。我要做的是制作一个运行该函数的内部API,并使计划的作业调用该内部API来运行任务。这可能对您不起作用。

在路由器中定义了一个新的API:

router.get('/refresh', (req, res, next) => {
  //this is the function that I needed the scheduler to run.
  utils.getData().then(response => {
    res.status(200).json(response);
  }).catch(err => {
    res.status(500).json({
      error: err
    });
  });
})

scheduled_job.js:

const fetch = require('node-fetch');
async function run() {
  try {
    let res = await fetch(process.env.REFRESH_PATH);
    result = await res.json();
    console.log(result);
  } catch (err) {
    console.log(err);
  }
}

run();

当然,您应该在heroku配置变量内设置API路径。

希望这对您有所帮助。