我有几个.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"
}
答案 0 :(得分:2)
这里有几个问题。首先,您是要在单独的Heroku dyno上运行每个节点脚本,还是只需在一个dyno上并行运行节点脚本就足够了?
如果一个dyno足够你,那么我认为你应该将你的Procfile更改为:
worker: npm start
(我假设您在" npm start"脚本中使用的npm-run-all出现在package.json依赖项中,否则无法正常工作)。
此外,您似乎不希望在您的应用中使用web dyno(即您不会处理传入的HTTP / S流量)。如果是这样,您需要明确scale your app's formation heroku scale web=0 worker=1
。
请注意,只有当您确实需要工作人员dyno始终在"时才应该这样做。但是,如果您只需要脚本执行某些工作然后退出,则应使用one-off dynos代替。在这种情况下,heroku scale
您的工作人员为0,然后您可以使用heroku run worker
从命令行将其作为一次性dyno启动。
但是,如果您的意图是让节点脚本在不同的dyno实例上并行运行,那么首先您需要了解Dyno scaling limits。请注意,"使用免费dyno类型的应用程序最多只能运行两个并发运行的dynos",这样就可以防止您与自由dynos并行运行9个dynos。使用one-off dynos可以获得稍微更多的免费并发dynos,但仍然不足以运行9个并发节点脚本。
如果您使用付费dynos,那么一种方法可以按照以下方式修改Procfile:
worker1: node script1.js
worker2: node script2.js
...
worker8: node script8.js
worker9: node script9.js
然后,使用heroku scale
将每个worker*
Process Types扩展为1。
但请注意,如果您需要9个节点脚本,并且总是在"上,那么您应该只这样做。如果您的脚本只需要做一些工作然后退出,那么您应该使用one-off dynos。否则你将支付很多未使用的资源!!在这种情况下,您可以使用heroku scale
将所有worker*
进程类型扩展为0,然后从命令行启动9个脚本,以与以下内容并行运行在单独的一次性dynos上:
heroku run worker1 &
heroku run worker2 &
...
heroku run worker9 &