我在https://github.com/typesafehub/config/blob/master/HOCON.md#substitution-fallback-to-environment-variables阅读了有关回退到环境变量的文档。我的理解是,这将吸引任何envars。所以,例如,如果从shell中我能够回显$ HOSTNAME并看到非空响应,那么HOCON也应该这样做。
在我的application.conf中,我有一行
akka.remote.netty.tcp.hostname = ${HOSTNAME}
但是,我的应用程序对此并不满意,因此无法启动。
/conf/application.conf: 9: Could not resolve substitution to a value: ${HOSTNAME}
这是用户问题吗?一个shell问题?我能够以用户身份登录并回显$ HOSTNAME
标记此scala和akka,因为该用户群可能最容易接触HOCON
答案 0 :(得分:1)
这是一个黑暗中的镜头,但你使用的是旧版本的typesafe-config吗?也许它是一个更新的功能?这个功能似乎在你描述的时候做广告,但如果你把typesafe-config作为一个瞬态依赖(比如来自akka),也许你会得到一个旧版本。
如果删除.conf文件中的替换(因此解析成功),然后打印出ConfigFactory.systemEnvironment()的内容会发生什么?供参考:http://typesafehub.github.io/config/latest/api/com/typesafe/config/ConfigFactory.html#systemEnvironment--
答案 1 :(得分:1)
HOCON没有拿起envar的原因是我的应用程序作为Linux服务(Centos 6.5)运行,它清除了大多数环境变量。
有关问题的相关说明,请参阅https://unix.stackexchange.com/questions/44370/how-to-make-unix-service-see-environment-variables
答案 2 :(得分:1)
HOSTNAME不是环境变量。这是一个bash内部变量。有关详细信息,请参阅https://superuser.com/questions/132489/hostname-environment-variable-on-linux。