如何使用REPLACE_OS_VARS与酿酒厂一起设置动态自定义vm.args?

时间:2019-04-18 15:18:10

标签: elixir distillery

背景

我正在尝试在一些长生不老药节点之间设置群集。我的理解是,可以通过修改发行版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的Web服务器。我正在构建服务器上构建发行版,将存档复制到Web服务器,然后将其取消存档并在此处启动。

问题

构建发行版并尝试在Web服务器上运行它时,在启动时会出现以下错误:

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

上面链接的文档指出:

  

仅在运行发行版之前在系统环境中导出REPLACE_OS_VARS = true的情况下,才会在运行时动态替换$ {HOSTNAME}和$ {NODE_COOKIE}部分,因此,如果要使用此方法,请确保这样做

基于此,我在网络服务器环境中添加了REPLACE_OS_VARS=true,但似乎没有影响。我也绝望地将它添加到了构建服务器的环境中,但是得到了相同的结果。

除了设置此环境变量以使动态vm.args正常工作之外,还有其他需要做的事情吗?或者我只是在这里遗漏了什么?

1 个答案:

答案 0 :(得分:1)

以下是可行的步骤。复制,然后与查找问题的条件进行比较。

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