Можете ли вы программно получить текущий идентификатор/имя модели 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
}

Я надеюсь, что это поможет