2017-01-09 18 views
4

私は、sbtネイティブパッケージャプラグインを使用して、アプリケーションのzipファイルを作成して、弾力のあるbeanstalkにデプロイします。私は自分のbeanstalk環境に環境変数を設定し、それらを実行時にアプリケーションを設定するために使用したいと思います。 $PORTは、パッケージャによって生成された起動スクリプトによって補間されていないようsbtネイティブパッケージャを使用した環境変数ベースのランタイムコンフィグレーション

web: ./bin/bridgeservice -Dhttp.port=$PORT 

これは動作しません:私はそうは次のように私のProcfile中のenv変数を参照しようとしましたしました。

私もそうのように私のbuild.sbt内の変数を定義しようとしましたしました:パッケージャは、配布zipファイルを構築する時にPORTのenv変数を期待して

import scala.util.Properties 

javaOptions in Universal ++= Seq(
    "-Dhttp.port=" + Properties.envOrElse("PORT", "9004"), 
) 

また、これは動作しません。また、 application.iniファイルでデフォルト値の9004をハードコーディングします。

アプリケーション起動時に環境変数に基づいてJavaオプションを動的に渡すことはできますか?

+0

私はこれをUbuntu 16.10でローカルにテストして動作します。補間は、スクリプトではなく、スクリプトを呼び出すシェルで行うべきです。 – Muki

+0

どのメソッドを使用しましたか? – novon

+0

私は 'sbt stage'で[このプロジェクト](https://github.com/muuki88/sbt-native-packager-examples/tree/master/simple-deb)をビルドし、' ./target/universal 'というスクリプトを呼び出しました/ stage/bin/mukis-application-conf -Dexample.greeting = $ PATH'となり、すべてが期待どおりに表示されました – Muki

答えて

0

これが役立つかどうかはわかりませんが、私のマルチモジュールプロジェクトのドッカー画像を構築するときに同様の問題がありました。

def sysPropOrDefault(propName: String, default: String): String = Option(System.getProperty(propName)).getOrElse(default) 
val somePort = sysPropOrDefault("port", "9004") 

とプロジェクト定義で:私はこれで終わった

設定レベルを投影するjavaOptionsを追加

lazy val someProject = project("some-project") 
    .enablePlugins(JavaServerAppPackaging) 
    .settings(
    javaOptions in Universal ++= Seq(
     s"-Dhttp.port=$somePort" 
    ) 
) 

は、私の場合には非常に重要でした。オプションの前には、タイプミスではありません。

端末からコマンドを実行しているとき、私は呼ば:

sbt clean update -Dport=9005 docker:publishLocal 
+0

共有してくれてありがとうございます。私の質問の文脈はaws beanstalkでアプリケーションを実行していたので、これで私の問題は解決しました:http://stackoverflow.com/questions/41539466/environment-variables-not-available-in-elastic-beanstalk-procfile – novon

1

javaOptions in Universalの設定はconfに/のapplication.iniファイルにコンパイルされますが、それに応じてsbt-native-packager docsのapplication.iniに現在、変数の代入をサポートしていません:

ファイルは、$ {app_home} /conf/application.iniにインストールされ、 スタートスクリプトによってそこから読み込まれます。コメントは#を使用し、好きなように新しい 行を使用できます。このファイルには現在、変数 がありません。ビルドの情報が 必要な場合は、build.sbtを使用することをお勧めします。

ので、のenv VARベースのランタイム設定は、いくつかの方法で達成することができます。

溶液#1。 build.sbtで生成された起動スクリプト

に余分な定義を追加します。

bashScriptExtraDefines += """addJava "-Dhttp.port=${PORT:-9004}"""" 

詳細はApplication and runtime configurationドキュメントを参照してください。

溶液#2:ターゲットサーバ

のSet JAVA_OPTSののenv varがジャストターゲットサーバー上JAVA_OPTS環境変数を設定し、起動スクリプトのためにそれを利用できるようにします。これは、AWS ElasticBeanstalkのような環境で、アプリケーションの環境設定ページでenv変数を設定できる最も簡単なソリューションです。

関連する問題