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

232
31

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

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

Создайте файл <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 лет, 2 месяца назад
210

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


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

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

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

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

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


    В корневой папке добавьте 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 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

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