Расписание Heroku запускает функцию, но затем выходит - PullRequest
1 голос
/ 03 мая 2019

Проблема

У меня развернуто приложение для узлов в Heroku, и я пытаюсь использовать Heroku Scheduler для выполнения задач, так как node-cron не работает с Heroku.

Планировщик работает, но всегда выходит с кодом 0. Изображение сообщения об ошибке ниже.

Heroku Error Code

Я работаю над этим уже 4 часа, и мне не повезло, так что если у кого-нибудь есть какие-либо предложения, которые были бы удивительными!

Код

Вот код в файле, который я использую с Heroku Scheduler. У меня запланировано запускать каждые 10 минут. Функция getActiveComps вызывает функцию из другого файла в приложении узла, которая выполняет вызовы внешнего API, а затем записывает данные в MongoDB через Mongoose.

#!/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 голосов
/ 18 июля 2019

Я никогда не решал проблему запуска асинхронной функции в запланированном задании, но я сделал обходной путь.Я сделал внутренний 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
    });
  });
})

schedule_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();

Конечно, вы должныустановите свой путь API в конфигурационном файле heroku.

Надеюсь, это вам поможет.

...