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

时间:2014-04-24 14:50:41

标签: scala heroku foreman dropwizard

我的Scala Dropwizard使用SBT Start Script插件(在撰写本文时提交c1fefeb59f3d6ba053f99b8d49a52779ac3dbce8),因此我可以使用工头轻松运行一个运行脚本。

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

我想设置端口。

这就是我的问题:在最新版本的SBT Start Script中,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管理的端口。

2 个答案:

答案 0 :(得分:2)

这可能无法解决您的问题(我不了解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密钥,以及SOURCE_APP环境变量,指定源应用程序(在您的情况下,本身)。在此示例中,我正在检查DATABASE_URL,但您可以使用您想要的内容。

答案 1 :(得分:1)

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

SIDENOTE :Heroku的平台API实际上非常棒。您可以使用它来缩放dynos,设置变量,提供/取消配置插件等。