有关一些背景知识和参考,以下是一些Heroku文档页面的一些报价。
从Heroku Node.js支持>激活中:
当应用程序package.json的根目录中有文件时,将使用Heroku Node.js buildpack 。
package.json
从Heroku Node.js支持>默认Web进程类型:
首先,Heroku寻找一个Procfile来指定您的进程类型。 如果Procfile在构建过程中应用程序的根目录中没有任何内容,则将通过运行npm start[…] 启动Web过程
首先,Heroku寻找一个Procfile来指定您的进程类型。
如果Procfile在构建过程中应用程序的根目录中没有任何内容,则将通过运行npm start[…] 启动Web过程
Procfile
npm start
从“ 进程类型”和“ Procfile”>“进程类型”作为模板:
Procfile包含许多进程类型声明,每个声明都在换行符上。每个进程类型都是命令的声明,该命令在启动该进程类型的dyno时执行。 例如,如果web声明了一种进程类型,则当启动这种类型的dyno时web,将执行与该进程类型关联的命令。例如,这可能意味着启动Web服务器。
Procfile包含许多进程类型声明,每个声明都在换行符上。每个进程类型都是命令的声明,该命令在启动该进程类型的dyno时执行。
例如,如果web声明了一种进程类型,则当启动这种类型的dyno时web,将执行与该进程类型关联的命令。例如,这可能意味着启动Web服务器。
web
我package.json在根目录中有一个文件(它将激活Node.js buildpack),并且Procfile在根目录中还包含一个具有以下内容的文件:
service: npm start
我假设不定义一个webdyno会导致它不被创建;service按照中声明的配置,仅应创建dyno Procfile。
service
相反,发生了什么事是一个 积极的 web赛道是 自动 使用创建npm start和 不活跃 service赛道使用的定义创建Procfile。然后,我不得不:
heroku ps:scale web=0
heroku ps:scale service=1
我绝对可以想象要在Heroku上运行一个不接受任何传入连接而仅建立传出连接的Node.js“服务”应用程序。有没有一种方法可以配置Node.js buildpack在web未定义时不自动创建dyno?我浏览了许多文档,寻找以下一种方法: (1)如此 定义或 (2) 删除 自动生成的web测功器;但是,我什么都没找到。
谢谢您的帮助!
最后,我在此与Heroku一起打开了一个服务台票。得到了他们的回应,所以我将其张贴在这里。感谢Heroku的支持!
简短的答案是,不,当前您需要heroku scale web=0 service=1在没有公共web流程的情况下运行服务。详细说明:
heroku scale web=0 service=1
早期,Node.js Buildpack检查a的存在Procfile,如果缺少,则使用创建一个默认的web: npm start。这使得无需Web流程即可轻松创建应用程序,因为您可以提供一个Procfile定义了某些流程的,而无需web列出。
web: npm start
但是,随着越来越多的用户需要阵列的buildpack而不是单个的buildpack,该解决方案产生了问题。Node是最受欢迎的第一个buildpack,因为Java,Python,PHP和Ruby应用程序经常使用它来构建前端资产。每当一个没有Procfile运行Node 的应用程序,然后是另一个buildpack 的应用程序时,Node都会注入自己的默认值Procfile(web: npm start),然后第二个buildpack便不会创建其默认值,Procfile因为文件系统中已经存在该默认值。因此,当应用程序中缺少默认Procfile时,注入默认Procfile会对多语言应用程序下游产生问题。
因此,我们停止了创建默认的Procfile,而是在bin / release中使用了default_process_types。这解决了后续的buildpack继承不正确的默认Procfiles的问题,但由于default_process_types是 扩展 而不是 被Procfile进程列表 取代 ,因此未在其中web定义进程的应用Procfile将web合并默认进程。这就是为什么web即使在中没有web输入也出现的原因Procfile。
default_process_types
我们也不想给任何客户带来意想不到的账单。一些应用程序具有多种流程类型,其中某些仅偶尔运行,某些仅限于单个实例,某些需要按比例缩放等,因此将所有内容默认设置为1而不是0可能还会导致额外的账单由于应用出现故障。这就是为什么非Web进程默认缩放为零的原因。