2016-12-21 80 views
3

當IEX交互方式運行設置的cookie和主機名發佈,運行一個可執行文件創建的使用mix escript.build時可以使用藥劑:採用混合創建escript.build

iex --cookie <cookie> --name <hostname> 

如何設置相同的值cookiename

我想通了,我需要創建一個vm.args文件包含以下內容

## Name of the node 
-name [email protected] 

## Cookie for distributed erlang 
-setcookie cookie 

所以我在同一個目錄下的可執行文件創建一個vm.args文件。但是當我打印Node.self()時,我收到了:[email protected]

那麼我在哪裏存儲vm.args,以便它被可執行文件讀取?

回答

3

據我所知,vm.args不是由escripts讀取。你已經(至少)2種選擇:

  1. mix.exs坐落在project/0傳遞給escriptemu_args鍵這些值:

    def project do 
        [app: :m, 
        ..., 
        escript: [main_module: M, emu_args: ["-name [email protected] -setcookie baz"]]] 
    end 
    
  2. 解析CLI參數,並在您main功能設置的值:

    defmodule M do 
        def main([name, cookie]) do 
        Node.start String.to_atom(name) 
        Node.set_cookie String.to_atom(cookie) 
        IO.inspect {Node.self, Node.get_cookie} 
        end 
    end 
    
    $ mix escript.build 
    $ ./m [email protected] baz 
    {:[email protected], :baz} 
    
+1

http://erlang.org/doc/man/erl.html中還有env變量ERL_AFLAGS,但我沒有時間去查看它是否可以解決這個問題。 –

+0

@FredtheMagicWonderDog工作!你想發表一個答案嗎?這是一個更好的解決方案,因爲您不必更改任何代碼。 – Dogbert

+0

繼續,你做了努力驗證它實際上工作。 –