在Heroku上运行几个node.js脚本

A B C D

我有几个.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"
  }
约尼·拉比诺维奇(Yoni Rabinovitch)

这里有几个问题。首先,是否要在单独的Heroku dyno上运行每个节点脚本,或者足以在一个dyno上并行运行节点脚本?

如果一个测力仪足以满足您的需要,那么我认为您应该将Procfile更改为:

worker: npm start

(我假设您在“ npm start”脚本中使用的npm-run-all将出现在package.json依赖项中,否则将无法正常工作)。

另外,您似乎不希望在应用程序中使用网络测功机(即您不处理传入的HTTP / S流量)。如果是这样,你需要明确地扩展您的应用程序的阵型喜欢的东西heroku scale web=0 worker=1

请注意,仅当您实际上需要使工作人员“始终处于活动状态”时,才应这样做。但是,如果您只需要脚本完成一些工作然后退出,则应使用一次性dynos在这种情况下,heroku scale您的worker为0,然后您可以从命令行使用一次性dyno启动它heroku run worker

但是,如果您的意图是让节点脚本在不同的dyno实例上并行运行,那么首先您需要了解Dyno缩放限制请注意,“使用自由dyno类型的应用程序最多只能同时运行两个dynos,”这似乎会阻止您与自由dynos并行运行9个dynos。通过使用一次性dynos可以获得更多的免费并发dyno ,但是仍然不足以运行9个并发节点脚本。

如果您使用付费的测功机,则要做的一种方法是按如下所示修改Procfile:

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

然后,使用heroku scale将每个worker* 流程类型缩放为1。

但是请注意,只有在需要9个节点脚本始终处于“ always on”状态时,才应该这样做。如果您的脚本只需要做一些工作然后退出,则应该使用一次性dynos否则,您将为大量未使用的资源付费!在这种情况下,您可以heroku scale将所有worker*进程类型缩放为0,然后从命令行启动9个脚本,以在单独的一次性dynos上并行运行,例如:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章