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