Подтвердить что ты не робот

Использование планировщика Heroku с Node.js

Существует буквально нет учебника об использовании планировщика Heroku с Node.js. Предположим, что у меня есть функция, называемая sayHello(), и я хотел бы запускать ее каждые 10 минут. Как я могу использовать его в контроллере. В ruby ​​вы пишете rake function_name(), однако никаких пояснений для Node. Могу ли я написать '/sayHello', или мне нужно сделать дополнительную конфигурацию?

4b9b3361

Ответ 1

Создайте файл <project_root>/bin/say_hello:

#! /app/bin/node
function sayHello() {
  console.log('Hello');
}
sayHello();
process.exit();

Разверните в Heroku и протестируйте его с помощью $ heroku run say_hello, затем добавьте его в планировщик с именем задачи say_hello.

Описание

Возьмите say_hello.js в качестве примера Node.js script, который вы обычно запускаете с помощью $ node say_hello.js.

Поверните его в script на

  • удаление окончания .js
  • вставка "shebang" вверху: #! /app/bin/node [1] [2]
  • перемещение его в каталог bin [3]

[1] Читайте о shebang в Википедии.
[2] Исполняемый файл node установлен в app/bin/node на Heroku. Вы можете проверить это, войдя в bash на Heroku с помощью $ heroku run bash, затем запросив $ which node.
[3] Heroku требует, чтобы скрипты были помещены в каталог bin. См. Определение задач в Центре Heroku Dev.

Я согласен с тем, что документация Heroku для планирования задач не очень понятна ни для чего, кроме сценариев Ruby. Мне удалось решить эту проблему после проб и ошибок. Надеюсь, это поможет.

Ответ 2

Лучшим подходом является определение вашего файла расписания, называемого, например, worker.js со следующим содержимым:

function sayHello() {
    console.log('Hello');
}
sayHello();

а затем в расписании heroku, вы просто пишете node worker, как вы его определяете в Procfile, и все!

Ответ 3

Ответ Кристофа работал у меня, пока мне не понадобилось передать параметр script, после чего он не удался. Проблема в том, что node не следует указывать в задаче. Вот как это сделать:

  • В своем Procfile определите тип процесса для script. Ниже приведен пример типичного файла Procfile с веб-процессом и для запуска "schedule_job.js" второго типа процесса, образно названного "рабочий".

    web: node app.js
    worker: node scheduled_job.js
    
  • В столбце задач планировщика Heroku просто введите имя типа процесса ( "рабочий" в этом примере) с параметрами или без них. Не вводите 'node' перед этим. Heroku показывает знак доллара перед ним, поэтому примеры правильной настройки будут $ worker (запускать без аргументов) или $ worker 123 abc (для выполнения schedule_job.js с аргументами "123" и "abc" )

Ответ 4

Следующие шаги работают в моей ситуации.

  • В корневой папке добавьте worker.js файл.
  • В worker.js. Напишите простую функцию, как описано выше. function sayHello() { console.log('Hello'); } sayHello();
  • Перейдите к дополнениям к планировщику heroku. Нажмите "Добавить новое задание" и введите "рабочий" в поле. Затем установите временной интервал и нажмите "Сохранить".

Здесь следует заметить

  • После установки обновлений работает. Если вы используете приведенный выше пример, вы можете использовать heroku run node worker.js, чтобы проверить, работает ли он. Он должен показывать "Hello" в вашем терминале.
  • Я использую express-babel стартер для моего проекта node.js.