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

时间:2013-05-04 08:50:55

标签: java heroku

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

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

2 个答案:

答案 0 :(得分:9)

总是有机器的主机名(看起来像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 changelog,本地环境变量DYNO现在取代PS,后者取代PS1

答案 1 :(得分:1)

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
}

我希望这会有所帮助