你能以编程方式访问当前的Heroku dyno id / name吗?

在Heroku上,您是否可以在应用程序中以编程方式获取当前正在执行代码的dyno的某种标识符? 例如dyno名称(例如“web.1”或“worker.1”)或其他一些id。

如果是,如何在Java中执行此操作?

总是有机器的主机名(看起来像d.LONG_GUID 。我想(虽然没有尝试)这应该工作:

String localhostname = java.net.InetAddress.getLocalHost().getHostName();

另外,一个鲜为人知的秘密,但你可以通过查看环境变量PS1的值来获取“web.1”,“web.2”id

String hostId = System.getenv("PS1")

编辑 2013年7月26日

根据Heroku更改日志 ,本地环境变量DYNO现在替换PS ,它取代了PS1

Heroku团队已经解决了这个问题,现在Dyno Manager添加了DYNO环境变量,其中包含您的Dyno的标识符,例如web.1web.2foo.1等。但是,该变量仍然是实验性的,可以更改或删除

您可以使用Java中的System.getenv(String)获取该变量的值。

例:

 final String dynoId = System.getenv("DYNO"); final Matcher matcher = Pattern.compile("(\\w+)\\.(\\d+)").matcher(dynoId); String id = null; if(matcher.find()) { id = matcher.group(2); // returns index: 1 // matcher.group(1) - returns name: web } 

我希望这会有所帮助