问题
我在Heroku上部署了一个节点应用程序,并且由于node-cron无法与Heroku一起使用,因此我试图使用Heroku Scheduler执行任务。
调度程序运行,但是它始终以代码0退出。错误消息的图片如下。
我已经进行了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');
})();
答案 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路径。
希望这对您有所帮助。