Scala 将sbt项目部署到heroku时启动超时

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

我有一个用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
我一直在跟踪调查。这是我的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中,但似乎我的进程没有运行runningRun
heroku ps:scale worker=1