是否有可能部署一个Node.js应用程序到Heroku没有一个networkingdynamic?
对于一些背景和参考,这里是一些Heroku文档页面的引用。
从Heroku Node.js支持>激活 :
当应用程序在根目录中有一个
package.json
文件时,使用Heroku Node.js buildpack。
来自Heroku Node.js支持>默认web进程types :
首先,Heroku查找指定您的stream程types的Procfile 。
如果在构build过程中没有在应用程序的根目录中存在
Procfile
,则将通过运行npm start
来启动Web进程,[…]
从进程types和Procfile>进程types作为模板 :
Procfile包含许多进程types声明,每个进程都在一个新行上。 每个进程types是一个命令的声明,当该进程types的一个dyno被启动时,该命令被执行。
例如,如果声明了一个
web
进程types,那么当这个types的dyno启动时,与web
进程types关联的命令将被执行。 例如,这可能意味着启动一个Web服务器。
我有一个在根(这将激活Node.js Procfile
package.json
一个package.json
文件,并且还包括一个Procfile
在根目录中具有以下内容:
service: npm start
我会假设没有定义一个web
将导致它不被创build; 应该按照Procfile
声明的configuration创buildservice
Procfile
。
相反,发生的事情是,使用npm start
自动创build一个活动的 web
Procfile
使用Procfile
的定义创build一个不活动的 service
Procfile
。 然后我不得不:
-
heroku ps:scale web=0
-
heroku ps:scale service=1
我可以肯定地想要在Heroku上运行一个Node.js“服务”应用程序,它不接受任何传入连接,只传出一个连接。 有没有办法configurationNode.js构build包不自动创build一个没有定义的web
dynamic? 我已经浏览了大量的文档,寻找一种方法来: (1)定义它,或(2) 删除自动生成的web
dynamic; 但是,我没有find任何东西。
谢谢您的帮助!
我最终在Heroku上开了一个帮助台票。 得到了他们的回应,所以我会在这里发布。 感谢Heroku的支持!
简短的回答是,不,目前你需要为了在没有公共web
进程的情况下运行一个服务而需要heroku scale web=0 service=1
。 对于更长的解释:
早期,Node.js Buildpack检查了Procfile
的存在,如果缺less,使用web: npm start
创build一个默认的。 这使得在没有web进程的情况下创build应用程序变得很容易,因为您可以提供一个定义一些进程的Procfile
,从列表中省略web
。
但是,随着越来越多的用户需要构build包而不是一个包,这个解决scheme就产生了问题。 Node是最受欢迎的第一个buildpack,因为它经常被Java,Python,PHP和Ruby应用程序用来构build前端资源。 每当没有Procfile
的应用程序Procfile
运行节点,然后再运行另一个buildpack时,Node会注入自己的默认Procfile
( web: npm start
),然后第二个buildpack将不会创build默认的Procfile
因为文件系统中已经存在一个。 因此,在应用程序中缺less缺省Procfile时,会为多语言应用程序的下游创build问题。
所以,我们停止创build一个默认的Procfile,而是在bin / release中使用default_process_types 。 这解决了后续buildpacksinheritance不正确的默认procfiles的问题,但是由于default_process_types
扩展而不是被 Procfile
进程列表所取代 ,没有在其Procfile
中定义的web
进程的应用程序将获得合并的默认web
进程。没有Procfile
的web
条目。
我们也不希望任何意外的账单给客户带来惊喜。 一些应用程序有很多stream程types,其中一些只是偶尔运行,一些仅限于一个实例,一些需要升级和降低等等,所以默认所有事情都是1而不是0,也可能会导致额外的计费作为应用程序故障。 这就是为什么非web进程默认缩放到零的原因。