11

我有一个在生产中运行的 elixir/OTP 应用程序,它以mix phoenix.server. 它有几个保持状态的进程。其中之一是作为代理实现的存储,当前具有我想手动更改的状态,而无需停止整个应用程序。一旦我在应用程序内的 iex 会话中,这将是微不足道的,但我不知道这样的选项在 elixir 中是否可行?

4

1 回答 1

21

这取决于您是如何启动 OTP 应用程序的。要连接到节点,它需要使用--nameor--sname标志启动。您可以检查当前正在运行的会话的名称node()

$ iex
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Interactive Elixir (1.3.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> node()
:nonode@nohost

节点名称是一个原子,其中第一部分是实际节点名称,第二部分是主机。主机用于路由,因此很难连接到部署在nohost.

如果您iex以短名称 ( --sname) 开头,它将自动检测您的主机名。

$ iex --sname foo --cookie ciastko
(...)
iex(foo@MacBook-Pro-Tomasz)1> node
:"foo@MacBook-Pro-Tomasz"

在其他一些控制台上iex以不同的名称和相同的 cookie 运行并尝试Node.connect(:"foo@MacBook-Pro-Tomasz"). 他们应该连接。

您可能在启动 phoenix 应用程序时没有考虑到这一点,因此您现在无法连接。要在下次需要运行时以这种可能性启动 Phoenix:

elixir --sname some_name --cookie ciastko -S mix phoenix.server
于 2016-07-21T08:51:56.837 回答