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

266
36

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

спросил(а) 2012-11-12T17:39:00+04:00 7 лет, 10 месяцев назад
1
Решение
334

Создайте файл <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. Мне удалось решить эту проблему после проб и ошибок. Надеюсь, это поможет.

ответил(а) 2012-12-19T18:48:00+04:00 7 лет, 9 месяцев назад
241

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


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

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

ответил(а) 2013-05-04T23:42:00+04:00 7 лет, 4 месяца назад
180

Ответ Кристофа работал у меня, пока мне не понадобилось передать параметр 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" )


ответил(а) 2014-05-04T15:52:00+04:00 6 лет, 4 месяца назад
41

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


    В корневой папке добавьте worker.js файл.
    В worker.js. Напишите простую функцию, как описано выше.

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

    Перейдите к дополнениям к планировщику heroku. Нажмите "Добавить новое задание" и введите "рабочий" в поле. Затем установите временной интервал и нажмите "Сохранить".

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


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

ответил(а) 2017-11-13T10:58:00+03:00 2 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема