【问题标题】:Environment variable based runtime configuration with sbt native packager使用 sbt 本机打包程序的基于环境变量的运行时配置
【发布时间】:2017-05-23 05:42:07
【问题描述】:

我正在使用 sbt 本机打包程序插件来创建我的应用程序的 zip 文件,以便部署到弹性 beanstalk。我想在我的 beanstalk 环境中设置环境变量,并将它们用于在运行时配置我的应用程序。我试图像这样在我的 Procfile 中引用环境变量:

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

这不起作用,因为 $PORT 没有被打包程序生成的启动脚本插值。

我也尝试在 build.sbt 中定义变量,如下所示:

import scala.util.Properties

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

这也不起作用,因为打包程序在构建可分发 zip 时需要 PORT 环境变量,并在 application.ini 文件中硬编码默认值 9004。

是否可以在应用启动时根据环境变量动态传递java选项?

【问题讨论】:

  • 我已经在 Ubuntu 16.10 上进行了本地测试,它可以工作。插值不应由脚本完成,而应在调用脚本的 shell 中完成。
  • 你用的是什么方法?
  • 我用sbt stage 构建了this project 并用./target/universal/stage/bin/mukis-application-conf -Dexample.greeting=$PATH 调用了脚本,一切都按预期显示

标签: scala amazon-elastic-beanstalk sbt-native-packager


【解决方案1】:

javaOptions in Universal中的设置编译成conf/application.ini文件,但对应sbt-native-packager docsapplication.ini目前不支持变量替换:

该文件将安装到 ${app_home}/conf/application.ini 和 startscript 从那里读取。您可以将 # 用于 cmets 和 new 你喜欢的线条。该文件当前没有任何变量 替代。如果您需要,我们建议使用 build.sbt 来自您的构建的信息。

因此,基于 env var 的运行时设置可以通过多种方式实现:

解决方案 #1。为生成的启动脚本添加额外的定义

在 build.sbt 中:

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

查看Application and runtime configuration 文档了解更多信息。

解决方案 #2:在目标服务器中设置 JAVA_OPTS env var

只需在目标服务器上设置JAVA_OPTS 环境变量并使其可用于启动脚本。对于 AWS ElasticBeanstalk 等可以在应用程序的环境配置页面上设置环境变量的环境,这可能是最简单的解决方案。

【讨论】:

    【解决方案2】:

    不确定这是否有帮助,但我在构建多模块项目的 docker 映像时遇到了类似问题。

    我以这个结尾:

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

    在项目定义中:

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

    在我的情况下,将 javaOptions 添加到项目设置级别至关重要。并且 s before 选项不是错字。

    从我调用的终端运行命令时:

    sbt clean update -Dport=9005 docker:publishLocal
    

    【讨论】:

    猜你喜欢
    • 2019-05-02
    • 2016-12-01
    • 1970-01-01
    • 2017-09-17
    • 2014-09-01
    • 2017-02-15
    • 1970-01-01
    • 2013-08-30
    • 2020-05-17
    相关资源
    最近更新 更多