我的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管理的端口。
答案 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,设置变量,提供/取消配置插件等。