簡體   English   中英

如何使用 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}]'

我有一個運行 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM