我的 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/