2017-09-08 4 views
0

目的:リモートマシンで「hello world」を表示します。エリクシルのリモートマシンでプログラムで「Hello World」を実行するにはどうすればよいですか?

私のコンピュータからプロセスを生成し、リモートマシン上に "Hello World"(Sample.helloを呼び出す)を印刷したいとします。前述のhereのように、別のマシンのノードを接続する方法があります。しかし、これはiexコマンドを使用しています。 "Hello World" プログラムでリモートマシン上のを印刷するには?リモートマシン上

defmodule Sample do 


    def hello do 
    IO.puts "Hello World" 
    end 

    def main(args \\ []) do 

    # IP address of remote server from command line argument. 

    {_, input, _} = OptionParser.parse(args, switches: []) 
    ipaddress = List.to_string(input) 

    """ 
     1. spawn new process 
     2. print hello world on remote machine - Call Sample.hello 
    """ 
    end 
end 
+2

「リモートサーバを起動」という意味を説明できますか?物理(または仮想)コンピュータをオンにしようとしていますか? Erlang/Elixirノードを起動しようとしていますか?他に何か? –

+0

申し訳ありませんが、間違った表現。私はリモートマシン上でhello worldプログラムを実行したいだけです。 –

+0

Erlang [rpc] [1]モジュールのようなものを使用できますか? [1]:http://erlang.org/doc/man/rpc.html – mpm

答えて

1

すでにコンパイルしたローカルエリクシル端子

Node.connect :"[email protected]" 
Main.main( :"[email protected]") 

でVM

$ iex --sname "[email protected]" --cookie mycookie 

を開始し、ローカルマシン上のVM

$ iex --sname "[email protected]" --cookie mycookie 

を開始ソース一つの端末では

:私はこれを実行していないが、それは

+0

** Remote **ノードは 'Sample'モジュールについて知っていますか?未定義のエラーはありませんか?そして、2台のマシンをテストする必要はありません。1台のマシンで2台のVMを実行することができます。単に 'node1 @ localhost'と' node2 @ localhost'と名付けてください。私は同じように働きます。 – mpm

+0

私が覚えている限り、モジュールをリモートVMに置く必要はありません - Node.spawnによって 'そこに送信されます'と思う - 今は2台のマシンがないので簡単にはできませんあなたをチェックしてください。 – GavinBrelstaff

+0

ノードからプログラムではなくノードから接続したい。私はNode.spawn(node、Sample、:loop、[])を実行しようとしています。しかし、次のエラーが発生します**(ErlangError)Erlangエラー::distribution_not_started (kernel)auth.erl:120::auth.set_cookie/2 産卵前にクッキー(Node.set_cookie/2)を設定する方法は? –

-1

@GavinBrelstaffの答えはOKであるだけに単純化することができる限り、あなたは、IPアドレス/名前をカスタマイズするように動作するはずです

defmodule Sample do 
    def loop do 
    receive do 
     {:message, msg} -> IO.puts message 
    end 
    loop() 
    end 
end 

defmodule Main do 
    def main(node) do 
    pid = Node.spawn(node, Sample, :loop, [ ]); 
    send pid, {:message, "Hello world"}; 
    end 
end 

$ iex --sname [email protected] 
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] 

Interactive Elixir (1.5.1) - press Ctrl+C to exit (type h() ENTER for help) 
iex([email protected])1> Node.spawn(:"[email protected]", fn -> IO.puts("Run on #{Node.self}") end) 
#PID<9960.95.0> 
Run on [email protected] 
0123:別の端末で

$ iex --sname [email protected] 

node1で実行された機能を確認できます。 IO.puts出力はnode2のコンソールににリダイレクトされるので、ノード1には出力されません(混乱の原因かもしれません)。

関連する問題