将 sbt 项目部署到 heroku 时启动超时
Boot timeout when deploying an sbt project to heroku
我有一个用 Scala 编写的微服务,主要是 运行 的计划作业。这不是一个播放应用程序。主要功能只是设置预定的工作。例如
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
我关注了 official Heroku documentation。这是我的 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 期望这个服务是一个网络服务器,所以它一直试图将它附加到一个开放的端口,但是因为这个服务不是一个网络服务器,所以它不能这样做。是否可以将此类微服务部署到 Heroku?是否需要使用自定义构建包?
您的 Procfile
应该使用 worker:
而不是 web:
。例如:
worker: target/universal/stage/bin/{myAppName}
然后将 "worker" dynos 放大 运行:
$ heroku ps:scale worker=1
您可以随意命名该过程(不必是 "worker"),但是 "web" dynos 被特殊对待。 Heroku 希望它们绑定到一个端口并为网络请求提供服务。
我有一个用 Scala 编写的微服务,主要是 运行 的计划作业。这不是一个播放应用程序。主要功能只是设置预定的工作。例如
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
我关注了 official Heroku documentation。这是我的 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 期望这个服务是一个网络服务器,所以它一直试图将它附加到一个开放的端口,但是因为这个服务不是一个网络服务器,所以它不能这样做。是否可以将此类微服务部署到 Heroku?是否需要使用自定义构建包?
您的 Procfile
应该使用 worker:
而不是 web:
。例如:
worker: target/universal/stage/bin/{myAppName}
然后将 "worker" dynos 放大 运行:
$ heroku ps:scale worker=1
您可以随意命名该过程(不必是 "worker"),但是 "web" dynos 被特殊对待。 Heroku 希望它们绑定到一个端口并为网络请求提供服务。