主にスケジュールされたジョブを実行するScalaで書かれたマイクロサービスがあります。それは遊びのアプリではありません。主な機能は、スケジュールされたジョブを設定するだけです。例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"
....
のように見えるものであると私はplugins.sbtファイルにHerokuのプラグインの両方を追加しただけでなく
addSbtPlugin("com.heroku" % "sbt-heroku" % "2.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.1")
私が使用している場合には、開発に完全に正常に動作sbtを実行します。私はHerokuがこのサービスをWebサーバーにしようとしていると考えているので、開いているポートに接続しようとしていますが、このサービスはWebサーバーではありません。そのようなマイクロサービスを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