【问题标题】:Attach an iex session to running elixir/OTP process将 iex 会话附加到正在运行的 elixir/OTP 进程
【发布时间】:2016-11-24 07:13:59
【问题描述】:

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

【问题讨论】:

    标签: elixir erlang-otp elixir-iex


    【解决方案1】:

    这取决于您如何启动 OTP 应用程序。要连接到节点,它需要以 --name--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上的节点。

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

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

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

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

    elixir --sname some_name --cookie ciastko -S mix phoenix.server
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2015-06-06
      • 2019-03-26
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多