[英]How to avoid Edeliver deployment error: “vm.args: No such file or directory”?
[英]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}]'
我有一个运行 Ubuntu 18.04 的构建服务器和两个运行 Ubuntu 18.04 的网络服务器。 我正在构建服务器上构建版本,将存档复制到网络服务器,然后将其解压缩并在那里启动。
当我构建我的版本并尝试在网络服务器上运行它时,我在启动时收到以下错误:
Failed setting -name! The hostname in 'myapp@' is not fully qualified
上面链接的文档指出:
如果您在开始发布之前在系统环境中导出 REPLACE_OS_VARS=true,则 ${HOSTNAME} 和 ${NODE_COOKIE} 部分只会在运行时动态替换,因此如果您想使用这种方法,请确保这样做。
基于此,我将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
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
然后在交互式 shell 中运行Node.self()
。 这会为我打印:"config_test@example.com"
。
请注意, HOSTNAME
应设置为 IP 或完全限定的域名。 要使用localhost
或其他本地名称(不带点),请指定-sname
而不是-name
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.