2017-11-08 13 views
1

主にスケジュールされたジョブを実行する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に導入することは可能ですか?カスタムビルドパックを使用する必要がありますか?

+0

あなたはherokuのweb-vs worker dynosのコンセプトを知っていますか? https://devcenter.heroku.com/articles/background-jobs-queueing – rethab

+0

記事を読んでください。私はProcfileで作業者を指定する必要があるようです。これはjavaアプリケーションがjava -jar path/to/jarであり、scalaアプリケーションではないことをコマンドに伝えます。 – satnam

+0

Procfileに 'worker:target/universal/stage/bin/{myAppName}'を入れてみましたが、プロセスが実行されていないようです。 – satnam

答えて

1

Procfileは、web:の代わりにworker:を使用する必要があります。たとえば、次のように続いて

worker: target/universal/stage/bin/{myAppName} 

実行して、「労働者」dynosスケールアップ:あなたは「あなたが欲しいプロセスは何も(「労働者」である必要はありませんが)名前を付けることができますが、

$ heroku ps:scale worker=1 

をウェブ "dynosは特別に扱われます。 Herokuは、ポートにバインドしてWeb要求を処理することを期待しています。

+0

ありがとう – satnam

関連する問題