运行 Heroku 上的几个 node.js 脚本
Running several node.js scripts on Heroku
我有几个 .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上并行运行你的节点脚本就足够了?
如果一个 dyno 对你来说足够了,那么我认为你应该将 Procfile 更改为:
worker: npm start
(我假设您在 "npm start" 脚本中使用的 npm-运行-all 出现在您的 package.json 依赖项中,否则将不起作用)。
此外,您似乎不想要 web dyno in your app (i.e. you aren't processing incoming HTTP/S traffic). If so, you need to explicitly scale your app's formation 和 heroku scale web=0 worker=1
.
之类的东西
请注意,只有在您确实需要您的工人测功机 "always on" 时才应该这样做。但是,如果您只需要让您的脚本完成一些工作然后退出,您应该改用 one-off dynos。在这种情况下,heroku scale
您的工作人员为 0,然后您可以使用 heroku run worker
.
从命令行将其作为一次性测功机启动
如果您的意图是让您的节点脚本在不同的 dyno 实例上并行 运行,那么首先您需要了解 Dyno scaling limits. Note that "applications using a free dyno type are limited to a maximum of two concurrent running dynos", so that would seem to prevent you from running 9 dynos in parallel with free dynos. You could get slightly more free concurrent dynos by using one-off dynos,但仍然不足以 运行 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 节点脚本 "always on" 时,您才应该这样做。如果您的脚本只需要做一些工作然后退出,您应该改用 one-off dynos。否则你将为大量未使用的资源付费!!在这种情况下,您可以使用 heroku scale
将所有 worker*
进程类型扩展为 0,然后在单独的一次性测功机上从命令行启动 9 个脚本到 运行像这样的东西:
heroku run worker1 &
heroku run worker2 &
...
heroku run worker9 &
我有几个 .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上并行运行你的节点脚本就足够了?
如果一个 dyno 对你来说足够了,那么我认为你应该将 Procfile 更改为:
worker: npm start
(我假设您在 "npm start" 脚本中使用的 npm-运行-all 出现在您的 package.json 依赖项中,否则将不起作用)。
此外,您似乎不想要 web dyno in your app (i.e. you aren't processing incoming HTTP/S traffic). If so, you need to explicitly scale your app's formation 和 heroku scale web=0 worker=1
.
请注意,只有在您确实需要您的工人测功机 "always on" 时才应该这样做。但是,如果您只需要让您的脚本完成一些工作然后退出,您应该改用 one-off dynos。在这种情况下,heroku scale
您的工作人员为 0,然后您可以使用 heroku run worker
.
如果您的意图是让您的节点脚本在不同的 dyno 实例上并行 运行,那么首先您需要了解 Dyno scaling limits. Note that "applications using a free dyno type are limited to a maximum of two concurrent running dynos", so that would seem to prevent you from running 9 dynos in parallel with free dynos. You could get slightly more free concurrent dynos by using one-off dynos,但仍然不足以 运行 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 节点脚本 "always on" 时,您才应该这样做。如果您的脚本只需要做一些工作然后退出,您应该改用 one-off dynos。否则你将为大量未使用的资源付费!!在这种情况下,您可以使用 heroku scale
将所有 worker*
进程类型扩展为 0,然后在单独的一次性测功机上从命令行启动 9 个脚本到 运行像这样的东西:
heroku run worker1 &
heroku run worker2 &
...
heroku run worker9 &