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

Posted

技术标签:

【中文标题】你能以编程方式访问当前的 Heroku dyno id/name 吗?【英文标题】:Can you programmatically access current Heroku dyno id/name? 【发布时间】:2013-04-28 15:42:55 【问题描述】:

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

如果是,如何在 Java 中做到这一点?

【问题讨论】:

【参考方案1】:

总是有机器的主机名(看起来像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

【讨论】:

好提示!我想你的意思是“PS”(不是“PS1”,这是提示)。 谢谢。然后投票:-) 我的意思是 PS1,除非他们同时改变了它。 是的,我投了赞成票。 :) 我可以确认测功机名称肯定在“PS”中,而不是在“PS1”中。 值得注意的是,环境变量是“实验性的,可以随时更改或删除”(如更改日志中所述)。但这确实回答了我的问题,谢谢! @AurélienOoms 我猜这值得一个单独的问题。无论如何,它看起来像 devcenter.heroku.com/articles/platform-api-reference#dyno-list 或 devcenter.heroku.com/articles/… 可能会做你想做的事。【参考方案2】:

Heroku 团队已经解决了这个问题,现在 Dyno 管理器添加了 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

希望对你有帮助

【讨论】:

以上是关于你能以编程方式访问当前的 Heroku dyno id/name 吗?的主要内容,如果未能解决你的问题,请参考以下文章

你能以编程方式知道 GPU 中每个块的最大块数和线程数吗?

你能以编程方式修改 UICollectionView 滚动方向吗?

你能以编程方式接受 UITextView 中的拼写更正吗?

将 Django 应用程序推送到 Heroku 后,Dynos 字段为空白

Heroku 免费帐户,一次性 dynos

你能以编程方式在iOS 8(w / Swift)中切换“请勿打扰”模式吗?