代码之家  ›  专栏  ›  技术社区  ›  abcd

运行多个节点。Heroku上的js脚本

  •  2
  • abcd  · 技术社区  · 6 年前

    我有几个。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 回复  |  直到 6 年前
        1
  •  3
  •   Yoni Rabinovitch    6 年前

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

    如果一个dyno就足够了,那么我认为您应该将Procfile更改为:

    worker: npm start
    

    (我假设您在“npm start”脚本中使用的所有npm run都出现在您的package.json依赖项中,否则这将不起作用)。

    而且,你似乎不想 web dyno 在您的应用程序中(即,您没有处理传入的HTTP/S流量)。如果是这样,您需要明确 scale your app's formation 比如 heroku scale web=0 worker=1

    请注意,只有当您确实需要您的工人dyno“始终在线”时,才应该这样做。但是,如果您只需要让脚本执行一些工作,然后退出,那么应该使用 one-off dynos 相反那样的话 heroku scale 将worker设置为0,然后您可以使用 heroku run worker

    然而,如果您的目的是让节点脚本在不同的dyno实例上并行运行,那么首先您需要了解 Dyno scaling limits 请注意,“使用免费dyno类型的应用程序最多只能有两个并发运行的dynos”,因此这似乎会阻止您与免费dynos并行运行9个dynos。您可以通过使用 one-off dynos ,但仍不足以运行9个并发节点脚本。

    如果您使用的是付费dynos,那么您想要做的一种方法是修改Procfile,如下所示:

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

    然后,使用 heroku音阶 缩放每个 worker* Process Types 至1。

    但是请注意,只有在需要9节点脚本“始终打开”时,才应该这样做。如果您的脚本只是需要做一些工作然后退出,那么应该使用 一次性dynos 相反否则,您将为大量未使用的资源付费!!在这种情况下,您可以使用 heroku音阶 缩放所有 工人* 将类型处理为0,然后从命令行启动9个脚本,以在单独的一次性dyno上并行运行,如下所示:

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