我有一个用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?是否需要使用自定义构建包?
答案 0 :(得分:1)
您的$DataSet.Tables[0] | Export-Csv "$DestinationPath\dump.csv" -Encoding UTF8 -Force -NoTypeInformation
应使用Procfile
代替worker:
。例如:
web:
然后通过运行:
来放大“worker”dynosworker: target/universal/stage/bin/{myAppName}
您可以根据需要为进程命名(不必是“worker”),但是“web”dynos会被特别处理。 Heroku希望它们绑定到端口并提供Web请求。