问题描述
我不确定如何将环境变量从我的 dev.env 和 prod.env 获取到我的 application.conf(或从 conf 文件中引用它们)。
我想将我的应用程序部署到 heroku 并将其连接到 heroku 的数据库。将来,我想在 docker 容器中部署到 AWS。
能否请一些人解释一下 Scala 中的环境变量是如何工作的,并解释一下如何从 application.conf 中引用环境变量。
application.conf 文件如下:
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = DEBUG
}
server-config {
host = "0.0.0.0"
port = 8080
base-url = ${?BASE_URL}
}
db-config {
url = {?JDBC_DATABASE_URL}
username = "su"
password = "password"
pool-size = 10
driver="org.h2.Driver"
}
dev.env 下面:
ENV=dev
BASE_URL=http://localhost:8080
JDBC_DATABASE_URL=jdbc:postgresql://localhost:5400/bookswapdb
prd.env 下面:
ENV=${_ENVIRONMENT}
BASE_URL=https://git.heroku.com/appone2021.git
JDBC_DATABASE_URL=${URL_WITH_CREDS_REDACTED}
解决方法
假设您正在使用 ConfigFactory.load
(或让 Akka 为您加载配置),环境变量将“正常工作”,假设 JVM 进程实际上在设置环境变量的情况下运行。>
要获得例如 db-config.url
的值,您应该能够做到
val config = ConfigFactory.load() // or if in an actor,context.system.config
val dbUrl = config.getString("db-config.url")
在 Heroku 上,您只需 use config vars。对于 AWS 部署,如何将环境变量注入容器的细节将取决于您运行容器的方式。请注意,在 IntelliJ 中设置环境变量可能很困难或不可能(因为如果 IntelliJ 在其自己的 JVM 中运行应用程序,它只会在 IntelliJ 启动时设置环境变量)。
,db={
default.driver = "org.postgresql.Driver"
default.url="vendor://username:password@host:port/db"
db.url=${DATABASE_URL}
db.profile="jdbc.PostgresProfile"
}
如果您使用内置数据库连接池之一,Play 会自动将其转换为 JDBC URL。 但是其他数据库库和框架,例如 Slick 或 Hibernate,可能本身不支持这种格式。 如果是这种情况,您可以尝试在如下配置中使用动态 JDBC_DATABASE_URL 代替 DATABASE_URL:
db.default.url=${?JDBC_DATABASE_URL}
从 application.conf 文件中获取值:
import com.typesafe.config.Config
val str1=config.getString("your_string")
参考https://www.playframework.com/documentation/2.8.x/ProductionHeroku