Shi*_*umi 9 javascript heroku node.js
对于某些背景故事和参考,以下是一些Heroku文档页面的引用.
当应用程序
package.json在根目录中有文件时,将使用Heroku Node.js buildpack .
首先,Heroku查找指定流程类型的Procfile.
如果
Procfile在构建过程中应用程序的根目录中没有,则您的Web进程将通过运行来启动npm start,[...]
Procfile包含许多进程类型声明,每个声明都在一个新行上.每个进程类型都是在启动该进程类型的dyno时执行的命令声明.
例如,如果
web声明了进程类型,那么当启动此类型的dyno时web,将执行与进程类型关联的命令.例如,这可能意味着启动Web服务器.
我package.json在根目录中有一个文件(将激活Node.js buildpack),我还在Procfileroot中包含了一个包含以下内容的文件:
service: npm start
Run Code Online (Sandbox Code Playgroud)
我认为不定义webdyno会导致它不被创建; 只service应按照声明中的配置创建dyno Procfile.
相反,发生了什么事是一个积极的 web赛道是自动使用创建npm start和不活跃 service赛道使用的定义创建Procfile.然后我不得不:
heroku ps:scale web=0heroku ps:scale service=1我绝对可以想象想在Heroku上运行Node.js"服务"应用程序,它不接受任何传入连接,只接收传出连接.有没有办法配置Node.js buildpack,以便web在未定义dyno时不自动创建dyno?我查看了许多文档,寻找以下方法之一:(1)将其定义为或(2) 删除自动生成的webdyno; 但是,我还没有找到任何东西.
谢谢您的帮助!
我最后在Heroku上打开了一张帮助台票.得到了他们的回复,所以我会在这里发布.谢谢Heroku的支持!
简短的回答是,不,目前您需要heroku scale web=0 service=1在没有公共web流程的情况下运行服务.更长的解释:
早期,Node.js Buildpack检查是否存在Procfile,如果缺少,则创建一个默认的web: npm start.这使得在没有Web进程的情况下创建应用程序变得容易,因为您可以提供一个Procfile定义了一些进程,web从列表中省略.
但是,随着越来越多的用户需要构建包的数组而不是单个数组,该解决方案会产生问题.Node是最受欢迎的第一个buildpack,因为Java,Python,PHP和Ruby应用程序经常使用它来构建前端资产.每当一个没有Procfile先运行Node 的应用程序和另一个buildpack第二个应用程序时,Node会注入自己的默认值Procfile(web: npm start),然后第二个buildpack将不会创建默认Procfile文件系统中已存在的默认值.因此,当应用程序中缺少一个默认的Procfile时,会为多语言应用程序创建下游问题.
因此,我们停止创建默认的Procfile,而是在bin/release中使用default_process_types.这解决了后续buildpacks继承错误的默认Procfiles的问题,但由于default_process_types是扩展而不是由进程列表替换Procfile,没有在其中web定义的进程的应用程序Procfile将web合并默认进程.这就是web即使没有web条目也会出现的原因Procfile.
我们也不希望任何有意外账单的客户感到惊讶.有些应用程序有许多进程类型,其中一些只是偶尔运行,一些仅限于单个实例,一些需要按比例放大,等等,因此将所有内容默认为1而不是0可能会导致额外的计费作为应用程序故障.这就是默认情况下非Web进程缩放为零的原因.
小智 5
在阅读 Shibumi 的回答后,我刚刚遇到了同样的问题,并在我的 Procfile 中解决了这个问题:
web: echo "useless"
service: node index.js
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |