Scala 将sbt项目部署到heroku时启动超时
我有一个用Scala编写的微服务,主要运行计划作业。这不是一个游戏应用程序。主功能只是设置计划的作业。比如说Scala 将sbt项目部署到heroku时启动超时,scala,heroku,deployment,sbt,sbt-native-packager,Scala,Heroku,Deployment,Sbt,Sbt Native Packager,我有一个用Scala编写的微服务,主要运行计划作业。这不是一个游戏应用程序。主功能只是设置计划的作业。比如说 import cronish.dsl._ object workers { def main(args: Array[String]) : Unit = { val payroll: CronTask = task { println("Syncing Payroll...") } payroll executes "every 5 minute
import cronish.dsl._
object workers {
def main(args: Array[String]) : Unit = {
val payroll: CronTask = task {
println("Syncing Payroll...")
}
payroll executes "every 5 minutes"
}
}
我将其部署到Heroku,当作业开始按预期运行时,Heroku每次都会在60秒后杀死它
Syncing Payroll...
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Stopping process with SIGKILL
Process exited with status 137
State changed from starting to crashed
我一直在跟踪调查。这是我的build.sbt的外观
name := "AppName"
version := "0.1"
scalaVersion := "2.11.9"
enablePlugins(JavaServerAppPackaging)
libraryDependencies += "com.smartsheet" % "smartsheet-sdk-java" % "2.2.2"
libraryDependencies += "com.github.philcali" %% "cronish" % "0.1.3"
libraryDependencies += "org.scalaj" %% "scalaj-http" % "2.3.0"
....
我还将这两个Heroku插件添加到plugins.sbt文件中
addSbtPlugin("com.heroku" % "sbt-heroku" % "2.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.1")
如果我使用sbt运行,它在开发时运行完全正常。我认为Heroku希望这个服务是一个web服务器,所以它一直试图将它连接到一个开放端口,但是因为这个服务不是一个web服务器,所以它不能这样做。有可能将这样的微服务部署到Heroku吗?是否需要使用自定义生成包?您的
Procfile
应该使用worker:
而不是web:
。例如:
worker: target/universal/stage/bin/{myAppName}
然后通过运行以下命令放大“工人”动态:
$ heroku ps:scale worker=1
您可以为流程命名任何您想要的名称(不必是“worker”),但“web”dynos是经过特殊处理的。Heroku希望他们绑定到一个端口并为web请求提供服务。您知道Heroku的web-vs-worker动态概念吗?只要看看这篇文章。似乎我需要在Procfile中指定worker。它告诉java应用程序的命令是java-jar path/to/jar,而不是scala应用程序。我尝试将
worker:target/universal/stage/bin/{myAppName}
放在Procfile中,但似乎我的进程没有运行runningRunheroku ps:scale worker=1