繁体   English   中英

build.sbt 和 application.conf 没有读取 .env 设置的环境变量

[英]build.sbt and application.conf are not reading environment variables set by .env

我正在尝试构建 Play Framework 应用程序的容器。 为此,我使用 sbt-native-packager 插件并使用命令“sbt clean docker:publishLocal”。 为了简化未来的管道和开发环境,我启用了 sbt-dotenv 插件以使用可以在其中定义变量的 .env 文件。 这些变量正在 build.sbt 和 application.conf 中使用

build.sbt

name := sys.env.get("APP_NAME")
organization := sys.props.get("CLIENT_NAME")
version := sys.props.get("APP_VSN")

application.conf 按如下方式使用它们,以允许使用默认值

default.username = username
default.username = ${?DB_USERNAME}
default.password = password
default.password = ${?DB_PASSWD}

当运行 sbt clean docker:publishLocal 时,我可以看到插件加载了变量,但配置文件永远找不到它们,并且总是回退到默认值。 由于我对 Docker 的理解有点有限,我想也许我需要将 envVars 传递给 Docker 如下:

dockerEnvVars := Map("APP_NAME" -> sys.env.get("APP_NAME").....

但这也不起作用,它们存在于最终容器中,但我在构建过程中需要它们,以便配置文件可以使用它们构建可分发文件。 我真的不知道还能尝试什么。 我尝试了不同的方法来获取环境变量,尝试了不同的版本,更新了我的插件,但似乎在互联网上找不到类似的东西。

sbt-dotenv 在构建时设置环境变量,而 Lightbend 配置库在运行时解析它们。 如果您希望在编译时替换 application.conf 中的变量,您可以:

  • 编写一个 sbt 任务,该任务将加载application.conf ,解析变量并创建一个包含实际值的新配置文件
  • 自定义mappings任务,使原始的application.conf不包含在最终映像中,而是使用您生成的新配置文件

但坦率地说,这整件事听起来像是个坏主意。 为什么不直接使用 docker 的--env标志docker run并在那里设置环境变量?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM