Здесь есть несколько проблем. Прежде всего, вы хотите запустить каждый из ваших узловых сценариев на отдельной 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 &