주로 예약 된 작업을 실행하는 스칼라로 작성된 마이크로 서비스가 있습니다. 연극 앱이 아닙니다. 주 기능은 예약 된 작업을 설정하는 것입니다. 예를heroku에 sbt 프로젝트를 배포 할 때 부팅 시간 초과가 발생했습니다.
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"
....
처럼 보이는 내가 사용하는 경우 그것은 개발에 완전히 잘 실행
addSbtPlugin("com.heroku" % "sbt-heroku" % "2.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.1")
뿐만 아니라 plugins.sbt 파일로 Heroku가 플러그인을 모두 추가 한 것입니다 sbt가 실행됩니다. 나는 Heroku가이 서비스가 웹 서버가 될 것으로 기대하고 있으므로 열려있는 포트에 연결하려고 시도하지만이 서비스는 웹 서버가 아니기 때문에 계속 사용할 수 없다고 생각합니다. 그러한 마이크로 서비스를 Heroku에 배치 할 수 있습니까? 사용자 지정 빌드 팩을 사용해야합니까?
heroku의 web-vs worker dynos 개념에 대해 알고 있습니까? https://devcenter.heroku.com/articles/background-jobs-queueing – rethab
그냥 기사를 읽으십시오. Procfile에서 작업자를 지정해야하는 것처럼 보입니다. 이것은 java 어플리케이션에 대한 명령이 java -jar path/to/jar이지만 scala 어플리케이션에는 해당하지 않는다고 전합니다. – satnam
Procfile에'worker : target/universal/stage/bin/{myAppName}'을 넣으려고했으나 프로세스가 실행되고 있지 않은 것처럼 보입니다. – satnam