Как настроить динамический пользовательский vm.args с ликеро-водочным заводом, используя REPLACE_OS_VARS? - PullRequest
1 голос
/ 18 апреля 2019

Фон

Я пытаюсь настроить кластеризацию между несколькими узлами эликсира. Насколько я понимаю, я могу настроить это, изменив релиз vm.args. Я использую Distillery для сборки релизов и следую документации здесь: https://hexdocs.pm/distillery/config/vm.args.html.

Мой rel/vm.args файл выглядит следующим образом:

-name <%= release_name %>@${HOSTNAME}
-setcookie <%= release.profile.cookie %>
-smp auto
-kernel inet_dist_listen_min 9100 inet_dist_listen_max 9155
-kernel sync_nodes_mandatory '[${SYNC_NODES_MANDATORY}]'

У меня есть сервер сборки под управлением Ubuntu 18.04 и два веб-сервера под управлением Ubuntu 18.04. Я собираю релиз на сервере сборки, копирую архив на веб-серверы и разархивирую его и запускаю там.

Задача

Когда я собираю свой выпуск и пытаюсь запустить его на веб-сервере, я получаю следующую ошибку при запуске:

Failed setting -name! The hostname in 'myapp@' is not fully qualified

В документации, указанной выше, говорится:

Части $ {HOSTNAME} и $ {NODE_COOKIE} будут динамически заменяться только во время выполнения, если вы экспортируете REPLACE_OS_VARS = true в системную среду перед началом выпуска, поэтому убедитесь, что вы делаете это, если хотите использовать этот подход .

Исходя из этого, я добавил REPLACE_OS_VARS=true в среду веб-сервера, но, похоже, это никак не отразилось. Я также добавил его в среду на сервере сборки из отчаяния, но получил те же результаты.

Есть ли что-то еще, что нужно сделать, кроме установки этой переменной среды, чтобы заставить работать динамический vm.args, или я просто что-то здесь упускаю?

1 Ответ

1 голос
/ 23 апреля 2019

Вот шаги, которые работают. Воспроизведите, затем сравните с тем, что вам нужно, чтобы найти проблему.

mix new config_test && cd config_test

Добавьте {:distillery, "~> 2.0", runtime: false} в качестве зависимости, затем выполните

mix deps.get && mix release.init

Замените -name <%= release_name %>@127.0.0.1 в вашем vm.args на

-name <%= release_name %>@${HOSTNAME}

Выполнить

MIX_ENV=prod mix release
REPLACE_OS_VARS=true HOSTNAME=example.com MIX_ENV=prod _build/prod/rel/config_test/bin/config_test console

Затем запустите Node.self() в интерактивной оболочке. Это печатает :"config_test@example.com" для меня.

Обратите внимание, что для HOSTNAME должен быть задан IP-адрес или полное доменное имя. Для использования localhost или другого локального имени (без точки) укажите -sname вместо -name.

...