【发布时间】:2015-11-21 19:01:37
【问题描述】:
我有一个通过 websocket 与聊天程序 (Slack) 交互的 Java 应用程序(打包为 JAR)。据我了解,我的应用程序不需要绑定到特定端口即可工作 - 它只是连接到 Slack 的实时消息传递 API。它不充当 Web 应用程序或 Web 服务器。它没有在任何端口上侦听传入请求,因为它不需要。我希望有人能够为我的应用程序单击“部署到 Heroku”按钮,并且我希望 Java 应用程序在应用程序部署后立即运行,而无需用户手动打开启动 Java 应用程序的进程.
我尝试使用“web”作为启动我的 Java 应用程序的进程类型(java -jar ...),但是,正如您可能猜到的那样,由于我的应用程序使用 websockets,应用程序在 60 秒后停止运行因为 Heroku 检测到它无法绑定到端口。
我尝试使用不同的进程名称(例如“bot”)作为进程类型,但一段时间后,由于没有运行 Web 进程,我收到“没有运行 Web 进程”错误。此外,在这种情况下,用户必须使用 Heroku 网站或命令行工具手动启动“bot”进程。
有没有一种方法可以设置它,这样它就不会抱怨我没有绑定到一个端口并且没有一个 Web 进程,而是当有人部署它时它也会自动启动?
编辑:我发现我可以通过告诉它不要期望任何 web dynos 来摆脱“没有运行 web 进程”错误。我什至可以使用未记录的 app.json 属性来实现:
"formation": [
{ "process": "web", "quantity": 0},
{ "process": "bot", "quantity": 1}
]
但是,他们仍然必须手动启动机器人进程。我也不想使用无证财产。如果我不使用它,他们必须在部署后使用命令行来修改应用程序。仍然没有找到让它自动启动的方法。
【问题讨论】:
标签: java heroku websocket slack-api