【问题标题】:Set Heroku environment variable as a function of another dynamic (Heroku-managed) variable将 Heroku 环境变量设置为另一个动态(Heroku 管理)变量的函数
【发布时间】:2014-04-24 14:50:40
【问题描述】:

我的 Scala Dropwizard 使用 SBT Start Script 插件(在撰写本文时提交 c1fefeb59f3d6ba053f99b8d49a52779ac3dbce8),因此我可以编写一个运行脚本,该脚本可以很容易地与工头一起运行。

但是,与 HOCON 不同的是,Dropwizard 的配置系统允许您使用 -Ddw.xxx 开关通过 JAVA_OPTS 覆盖 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 heroku foreman dropwizard


    【解决方案1】:

    这可能无法解决您的问题(我不了解 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_KEYSOURCE_APP 环境变量中的有效 Heroku API 密钥,用于指定源应用程序(在您的情况下,它本身)。在这个例子中,我正在检查DATABASE_URL,但你可以使用你想要的。

    【讨论】:

    • 太棒了,谢谢。我最近一直专注于 AWS,我完全错过了这个新的 Heroku 功能。不过很遗憾,heroku config 没有显示这个动态设置的变量。
    【解决方案2】:

    @catsby 是正确的——您需要使用Heroku Platform API 来执行此操作。

    旁注:Heroku 的平台 API 实际上非常棒。您可以使用它来扩展测功机、设置变量、配置/取消配置插件等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-23
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2019-09-01
      • 2020-11-24
      • 2014-03-16
      相关资源
      最近更新 更多