如何使用 REPLACE_OS_VARS 为酿酒厂设置动态自定义 vm.args?
How to setup dynamic custom vm.args with distillery using REPLACE_OS_VARS?
背景
我正在尝试在几个 elixir 节点之间设置集群。我的理解是,我可以通过修改发布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}]'
我有一个构建服务器 运行ning Ubuntu 18.04 和两个网络服务器 运行ning Ubuntu 18.04。我正在构建服务器上构建版本,将存档复制到网络服务器,然后取消存档并在那里启动它。
问题
当我构建我的版本并尝试在网络服务器上 运行 它时,我在启动时收到以下错误:
Failed setting -name! The hostname in 'myapp@' is not fully qualified
上面链接的文档指出:
The ${HOSTNAME} and ${NODE_COOKIE} parts will only be dynamically replaced at runtime if you export REPLACE_OS_VARS=true in the system environment prior to starting the release, so be sure you do so if you want to use this approach.
在此基础上,我在webserver环境中添加了REPLACE_OS_VARS=true
,但似乎没有任何影响。出于绝望,我也将它添加到构建服务器的环境中,但得到了相同的结果。
除了设置此环境变量以使动态 vm.args 正常工作之外,还有什么需要做的吗?还是我只是遗漏了什么?
以下是有效的步骤。重现,然后与您所拥有的进行比较以找到问题。
mix new config_test && cd config_test
添加{:distillery, "~> 2.0", runtime: false}
作为依赖,然后运行
mix deps.get && mix release.init
将 vm.args
中的 -name <%= release_name %>@127.0.0.1
替换为
-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()
在互动shell。这会为我打印 :"config_test@example.com"
。
请注意,HOSTNAME
应设置为 IP 或完全限定的域名。要使用 localhost
或其他本地名称(不带点),请指定 -sname
而不是 -name
.
背景
我正在尝试在几个 elixir 节点之间设置集群。我的理解是,我可以通过修改发布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}]'
我有一个构建服务器 运行ning Ubuntu 18.04 和两个网络服务器 运行ning Ubuntu 18.04。我正在构建服务器上构建版本,将存档复制到网络服务器,然后取消存档并在那里启动它。
问题
当我构建我的版本并尝试在网络服务器上 运行 它时,我在启动时收到以下错误:
Failed setting -name! The hostname in 'myapp@' is not fully qualified
上面链接的文档指出:
The ${HOSTNAME} and ${NODE_COOKIE} parts will only be dynamically replaced at runtime if you export REPLACE_OS_VARS=true in the system environment prior to starting the release, so be sure you do so if you want to use this approach.
在此基础上,我在webserver环境中添加了REPLACE_OS_VARS=true
,但似乎没有任何影响。出于绝望,我也将它添加到构建服务器的环境中,但得到了相同的结果。
除了设置此环境变量以使动态 vm.args 正常工作之外,还有什么需要做的吗?还是我只是遗漏了什么?
以下是有效的步骤。重现,然后与您所拥有的进行比较以找到问题。
mix new config_test && cd config_test
添加{:distillery, "~> 2.0", runtime: false}
作为依赖,然后运行
mix deps.get && mix release.init
将 vm.args
中的 -name <%= release_name %>@127.0.0.1
替换为
-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()
在互动shell。这会为我打印 :"config_test@example.com"
。
请注意,HOSTNAME
应设置为 IP 或完全限定的域名。要使用 localhost
或其他本地名称(不带点),请指定 -sname
而不是 -name
.