我有一个用
启动的Elixir应用程序iex --sname "main" --cookie "abc" --detached -S mix
如果我在没有detached
选项的情况下启动此过程,一切正常。除此之外,main
进程使用.csv
和File.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
节点时重复相同的操作,则可以正常运行并向我返回正确的文件路径。
我忘记了哪种配置选项?
答案 0 :(得分:0)
那是因为您无法在分离模式下启动iex
。 iex
是一个外壳程序,需要输入。但是分离意味着没有输入或输出。 Erlang无法启动iex,最终您只能运行裸露的Erlang,而没有任何指示。
您可以尝试:rpc.call(:main@localhost, Application, :loaded_applications, [])
,并且应该看到只有stdlib
和kernel
正在运行。
如果您运行elixir --erl "-detached" --no-halt --sname "main" --cookie "abc" -S mix
,它将正常运行。这里要注意三件事:
elixir
代替iex
。--detached
已过时,请改用--erl "-detached"
。--no-halt
,因为否则,长生不老药会立即退出。