scala - 将 Heroku 环境变量设置为另一个动态(Heroku 管理)变量的函数

标签 scala heroku foreman dropwizard

我的 Scala Dropwizard 使用 SBT Start Script插件(在撰写本文时提交 c1fefeb59f3d6ba053f99b8d49a52779ac3dbce8),以便我可以上演一个可以通过 foreman 轻松运行的运行脚本。

但是,与 HOCON 不同,Dropwizard 的配置系统允许您通过 JAVA_OPTS 使用 -Ddw.xxx 开关覆盖 YAML 文件中的变量。

我想设置端口。

这就是我的问题:在最新版本的 SBT 启动脚本中,JAVA_OPTS 是作为启动脚本的一部分生成的,因此您无法再通过 Procfile 传递它。因此,将 Heroku 管理的 $PORT 引入我的应用程序的唯一方法是通过 JAVA_OPTS 将其设置为 -Ddw.http.port=$PORT

我该怎么做?

我已经在命令行上尝试过 heroku config:set 参数:

  • JAVA_OPTS="-Ddw.http.port=$PORT" — 在我的环境中,其计算结果为 $PORT,主要是“”。
  • JAVA_OPTS="-Ddw.http.port=\$PORT"heroku config 然后将其显示为 JAVA_OPTS="-Ddw.http.port =$PORT",但应用程序会获得文字 $PORT 作为端口号,即它不会在 Heroku 上进行评估。
  • JAVA_OPTS="-Ddw.http.port=\\\$PORT"heroku config 然后将其显示为 JAVA_OPTS="-Ddw.http .port=\$PORT",但应用程序会得到文字 \$PORT
  • JAVA_OPTS="-Ddw.http.port=$$PORT"$$ 是当前 shell(不是子 shell)的 pid,所以 Heroku 设置了一些东西例如12345PORT

请告诉我如何通过 JAVA_OPTS 设置 Heroku 管理的端口。

最佳答案

这可能无法解决您的问题(我不知道 Scala 或 JAVA_OPTS 的东西),但您可以使用 .profile.d script在应用程序启动时动态设置环境变量。下面是我使用 Heroku API 设置 DATABASE_URL 环境变量的示例:

# .profile.d file
export DATABASE_URL=`curl -s -H "Authorization: Bearer $API_KEY" \
 -X GET https://api.heroku.com/apps/$SOURCE_APP/config-vars \
 -H "Accept: application/vnd.heroku+json; version=3" \
 | grep "DATABASE_URL" | cut -d '"' -f 4 `

此脚本依赖于存储在应用程序环境变量 API_KEY 中的有效 Heroku API key 以及 SOURCE_APP 环境变量,指定源应用程序(在您的情况下) ,本身)​​。在此示例中,我正在检查 DATABASE_URL,但您可以使用您想要的内容。

关于scala - 将 Heroku 环境变量设置为另一个动态(Heroku 管理)变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272402/

相关文章:

ruby-on-rails - 在 Procfile 中启动多个 worker(开发环境 vs Heroku)

scala - 继承Scala中的apply方法

ruby-on-rails - Rails 4、Heroku、Zurb 基金会 5

heroku - 部署到 Heroku 会中断当前的 Web 进程吗?

ruby-on-rails - 工头:命令 "start"未定义

ruby-on-rails - 工头开发与生产( rails )

javascript - 有没有好的方法来管理 CDN 提供的 javascript 依赖项?

java - 这是将 Java 接口(interface)转换为 Scala 的正确方法吗?

scala - 未找到 key 'akka.version' 的配置设置

ruby-on-rails - Ruby on Rails 和 Heroku 问题