[英]With Heroku, how can I automatically start a Java app that doesn't bind to a port when the app is deployed?
我有一个Java应用程序(打包为JAR),可通过websocket与聊天程序(Slack)进行交互。 据我了解,我的应用程序无需绑定到特定端口即可工作-只需连接到Slack的Real Time Messaging API。 它不充当Web应用程序或Web服务器。 它不需要监听任何端口上的传入请求,因为它不需要监听。 我希望某人能够为我的应用程序单击“部署到Heroku”按钮,并且希望Java应用程序在部署该应用程序后立即运行,而无需用户手动打开启动Java应用程序的过程。
我尝试使用“ web”作为启动我的Java应用程序的进程类型(java -jar ...),但是,您可能猜到了,因为我的应用程序使用了websockets,所以该应用程序在60秒后停止运行,因为Heroku检测到它无法绑定到端口。
我尝试使用其他类型的进程名称(例如“ bot”)作为进程类型,但是一段时间后,由于没有Web进程在运行,因此出现“ No web process running”错误。 同样,在这种情况下,用户必须使用Heroku网站或命令行工具手动启动“机器人”过程。
有没有一种我可以设置的方法,所以它不会抱怨我没有绑定到端口并且没有Web进程,但是它在有人部署时也会自动启动?
编辑:我发现我可以通过告诉它不要期望任何Web动态来摆脱“没有运行Web进程”错误。 我什至可以使用未记录的app.json属性来实现此目的:
"formation": [
{ "process": "web", "quantity": 0},
{ "process": "bot", "quantity": 1}
]
但是,他们仍然必须手动启动Bot进程。 我也不想使用未记录的属性。 如果我不使用它,则在部署应用程序后,他们必须使用命令行来修改该应用程序。 仍未找到使它自动启动的方法。
这有点麻烦,但是您可以使用“ web” proc类型并在Java进程旁边启动一个简单的Web服务器。 例如:
web: sh start.sh
然后将start.sh脚本添加到您的项目中,如下所示:
ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => ENV["PORT"], :DocumentRoot => Dir.pwd).start' &
java -jar myapp.jar
在ruby命令后注意“&”
在您的Procfile中,只需将进程类型命名为“ web”以外的其他名称。 例如:
worker: java -jar myapp.jar
然后相应地扩大规模:
heroku ps:scale worker=1
仅需要“网络”测功机才能绑定到端口。
您也可以从仪表板放大它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.