Выполнение нескольких скриптов node.js на Heroku - PullRequest
0 голосов
/ 03 мая 2018

У меня есть несколько скриптов .js, есть ли способ запустить их одновременно в одном приложении Heroku?

Мой folder выглядит так:

**MAIN_FOLDER**
    Procfile
    script1.js
    script2.js
    script3.js
    script4.js
    script5.js
    script6.js
    script7.js
    script8.js
    script9.js

Мой Procfile:

worker: node script1.js
worker: node script2.js
...
worker: node script8.js
worker: node script9.js

И мой package.json:

 "scripts": {
    "script1": "node script1.js",
    "script2": "node script2.js",
    "script3": "node script3.js",
    "script4": "node script4.js",
    "script5": "node script5.js",
    "script6": "node script6.js",
    "script7": "node script7.js",
    "script8": "node script8.js",
    "script9": "node script9.js",
    "start": "npm-run-all --parallel script1 script2 script3 script4 script5 script6 script7 script8 script9"
  }

1 Ответ

0 голосов
/ 03 мая 2018

Здесь есть несколько проблем. Прежде всего, вы хотите запустить каждый из ваших узловых сценариев на отдельной Heroku dyno , или вам достаточно параллельного запуска ваших узловых сценариев на одной dyno?

Если вам достаточно одного динамометра, то я думаю, что вы должны изменить свой Procfile следующим образом:

worker: npm start

(я предполагаю, что npm-run-all, который вы используете в своем скрипте "npm start", появляется в ваших зависимостях package.json, иначе это не будет работать).

Кроме того, кажется, что вы не хотите веб-dyno в своем приложении (т. Е. Вы не обрабатываете входящий трафик HTTP / S). Если это так, вам нужно явно масштабировать формирование вашего приложения с помощью чего-то вроде heroku scale web=0 worker=1.

Обратите внимание, что вы должны делать это только в том случае, если вам действительно нужно, чтобы ваш рабочий dyno был "всегда включен". Однако, если все, что вам нужно, это чтобы ваши скрипты выполнили какую-то работу, а затем вышли, вы должны вместо этого использовать одноразовые динамометры . В этом случае heroku scale ваш работник равен 0, а затем вы можете запустить его как одноразовый динамо из командной строки с помощью heroku run worker.

Если, однако, вы намерены параллельно выполнять сценарии вашего узла на разных экземплярах dyno, то, прежде всего, вам нужно знать о Ограничениях масштабирования Dyno . Обратите внимание, что «приложения, использующие свободный тип dyno, ограничены максимум двумя одновременно работающими dyno», так что это может помешать запуску 9 dyno параллельно со свободными dyno. Вы могли бы получить немного больше бесплатных одновременных динамов, используя одноразовые динамо , но этого все же недостаточно для запуска 9 одновременных сценариев узлов.

Если вы используете платные dynos, то одним из способов сделать то, что вы хотите, было бы изменить ваш Procfile следующим образом:

worker1: node script1.js
worker2: node script2.js
...
worker8: node script8.js
worker9: node script9.js

Затем используйте heroku scale, чтобы масштабировать каждый из worker* Типов процессов до 1.

Обратите внимание, что вы должны делать ТОЛЬКО, если вам нужно, чтобы ваши 9-узловые скрипты были «всегда включены». Если вашим сценариям просто нужно выполнить некоторую работу и затем завершить работу, вы должны вместо этого использовать одноразовые dynos . В противном случае вы будете платить за много неиспользованных ресурсов! В этом случае вы можете использовать heroku scale для масштабирования всех типов процессов worker* до 0, а затем запустить 9 сценариев из командной строки для запуска на отдельных одноразовых динамо параллельно с чем-то вроде:

heroku run worker1 &
heroku run worker2 &
...
heroku run worker9 &
...