У меня есть несколько сценариев .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"
}





Здесь есть несколько проблем. Прежде всего, хотите ли вы запускать каждый из сценариев узла на отдельном Heroku dyno или вам достаточно запускать сценарии узла параллельно на одном динамометрическом стенде?
Если вам достаточно одного dyno, я думаю, вам следует изменить свой Procfile, чтобы он читал:
worker: npm start
(Я предполагаю, что npm-run-all, который вы используете в своем сценарии «npm start», отображается в ваших зависимостях package.json, иначе это не сработает).
Кроме того, похоже, вам не нужен веб-дино в вашем приложении (т.е. вы не обрабатываете входящий трафик HTTP / S). Если это так, вам нужно явно указать масштабируйте формирование вашего приложения с чем-то вроде heroku scale web=0 worker=1.
Обратите внимание, что вы должны делать это только в том случае, если вам действительно нужно, чтобы ваш рабочий дино был постоянно включен. Однако, если все, что вам нужно, это чтобы ваши скрипты выполнили некоторую работу, а затем завершили работу, вам следует вместо этого использовать одноразовые стенды. В этом случае установите heroku scale вашего рабочего на 0, а затем вы можете запустить его как одноразовый дино из командной строки с помощью heroku run worker.
Однако, если вы хотите, чтобы сценарии узла выполнялись параллельно на разных экземплярах динамометрического стенда, то, прежде всего, вам нужно знать о Пределы масштабирования Dyno. Обратите внимание на то, что «приложения, использующие бесплатный тип дино ограничены максимум двумя одновременными запущенными дино», так что, похоже, это не позволяет вам запускать 9 дино параллельно со свободными дино. Вы можете получить немного больше бесплатных параллельных динамиков, используя одноразовые стенды, но все же этого недостаточно для запуска 9 одновременных сценариев узлов.
Если вы используете платные динамометрические станции, то один из способов сделать то, что вы хотите, - это изменить свой Procfile следующим образом:
worker1: node script1.js
worker2: node script2.js
...
worker8: node script8.js
worker9: node script9.js
Затем используйте heroku scale для масштабирования каждого из worker*Типы процессов до 1.
Обратите внимание, однако, что вы должны делать это ТОЛЬКО, если вам нужно, чтобы ваши сценарии 9 узлов были «всегда включены». Если вашим скриптам просто нужно поработать, а затем выйти, вам следует использовать вместо этого одноразовые стенды. В противном случае вы будете платить МНОГО неиспользованных ресурсов !! В этом случае вы можете использовать heroku scale для масштабирования всех типов процессов worker* до 0, а затем запустить свои 9 сценариев из командной строки для запуска на отдельных одноразовых динамометрических станциях параллельно с чем-то вроде:
heroku run worker1 &
heroku run worker2 &
...
heroku run worker9 &