【问题标题】:Running several node.js scripts on Heroku在 Heroku 上运行几个 node.js 脚本
【发布时间】:2023-03-05 00:52:01
【问题描述】:

我有几个 .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"
  }

【问题讨论】:

    标签: node.js heroku npm package.json procfile


    【解决方案1】:

    这里有几个问题。首先,您是想在单独的Heroku dyno 上运行每个节点脚本,还是在一个测功机上并行运行节点脚本就足够了?

    如果一个测功机对你来说就足够了,那么我认为你应该将你的 Procfile 更改为:

    worker: npm start
    

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

    此外,您似乎不希望在您的应用中使用 web dyno(即您没有处理传入的 HTTP/S 流量)。如果是这样,您需要使用类似heroku scale web=0 worker=1 的内容明确地scale your app's formation

    请注意,只有当您确实需要您的工作人员测功机“始终在线”时,您才应该这样做。但是,如果您只需要让脚本执行一些工作然后退出,则应该改用one-off dynos。在这种情况下,将 heroku scale 您的工作人员设置为 0,然后您可以使用 heroku run worker 从命令行将其作为一次性测功机启动。

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

    如果您使用的是付费测功机,那么做您想做的事情的一种方法是按如下方式修改您的 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 个脚本以在单独的一次性测功机上并行运行,例如:

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

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2018-05-12
      • 2018-11-18
      • 2015-02-18
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多