Можете ли вы программно получить текущий идентификатор/имя модели Heroku?
На Heroku, можете ли вы программно, изнутри приложения, получить какой-то идентификатор для исполняемого кода dyno, выполняющего текущий код? Например, имя dyno (например, "web.1" или "worker.1" ) или какой-либо другой идентификатор.
Если да, как это сделать в Java?
Ответы
Ответ 1
Всегда есть имя хоста машины (которое выглядит примерно как d.LONG_GUID
. Я полагаю (хотя и не пробовал), что это должно работать:
String localhostname = java.net.InetAddress.getLocalHost().getHostName();
Кроме того, небольшой секрет, но вы можете получить идентификатор "web.1", "web.2", посмотрев на значение переменной окружения PS1
String hostId = System.getenv("PS1")
EDIT 2013-Июль-26
В соответствии с журнал изменений Heroku локальная переменная окружения DYNO
теперь заменяет PS
, которая заменила PS1
.
Ответ 2
Команда Heroku рассмотрела эту проблему, и теперь Dyno Manager добавляет переменные среды DYNO
, которые содержат идентификатор вашего Dyno, например. web.1
, web.2
, foo.1
и т.д. Однако переменная остается экспериментальной и может быть изменена или удалена.
Вы можете получить значение этой переменной с помощью System.getenv(String)
в Java.
Пример:
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
}
Я надеюсь, что это поможет