分离的进程不会写入文件& rpc调用因连接节点错误而失败

时间:2016-02-03 14:43:22

标签: elixir

我有一个用

启动的Elixir应用程序
iex --sname "main" --cookie "abc" --detached -S mix

如果我在没有detached选项的情况下启动此过程,一切正常。除此之外,main进程使用.csvFile.open将数据写入IO.write(file_path, data)文件。使用detached选项,不会向文件写入任何内容。

所以我想,我可以尝试从我用

开始的另一个节点连接到这个进程
iex --sname "test" --cookie "abc" -S mix

然后我做

Node.connect(main@localhost)

Node.list确认我已连接到main节点。第一个进程包含一个函数,用于返回相关.csv文件的文件路径。如果我打电话

:rpc.call(:main@localhost, Log, :csv_path, [])

它返回错误

{:badrpc, :EXIT, {:undef, [{Log, :csv_path, [], []}....

如果我在没有main选项的情况下启动detached节点时重复相同的操作,则可以正常运行并向我返回正确的文件路径。

我忘记了哪种配置选项?

1 个答案:

答案 0 :(得分:0)

那是因为您无法在分离模式下启动iexiex是一个外壳程序,需要输入。但是分离意味着没有输入或输出。 Erlang无法启动iex,最终您只能运行裸露的Erlang,而没有任何指示。

您可以尝试:rpc.call(:main@localhost, Application, :loaded_applications, []),并且应该看到只有stdlibkernel正在运行。

如果您运行elixir --erl "-detached" --no-halt --sname "main" --cookie "abc" -S mix,它将正常运行。这里要注意三件事:

  1. 使用elixir代替iex
  2. --detached已过时,请改用--erl "-detached"
  3. 添加--no-halt,因为否则,长生不老药会立即退出。