将sbt项目部署到heroku时的引导超时

时间:2017-11-08 14:48:42

标签: 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 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 run,它在开发上运行完全正常。我认为Heroku期望这项服务成为一个Web服务器,所以它一直试图将它连接到一个开放的端口,但是由于这项服务不是一个Web服务器,它不能这样做。是否可以将这些微服务部署到Heroku?是否需要使用自定义构建包?

1 个答案:

答案 0 :(得分:1)

您的$DataSet.Tables[0] | Export-Csv "$DestinationPath\dump.csv" -Encoding UTF8 -Force -NoTypeInformation 应使用Procfile代替worker:。例如:

web:

然后通过运行:

来放大“worker”dynos
worker: target/universal/stage/bin/{myAppName}

您可以根据需要为进程命名(不必是“worker”),但是“web”dynos会被特别处理。 Heroku希望它们绑定到端口并提供Web请求。