Mnesia 在同一节点上的 2 个独立 IEx 会话中

Mnesia in 2 separate IEx sessions on the same node

我正在学习 Erlang 的 mnesia DB 并尝试在 Elixir 应用程序中使用它。根据文档,在默认情况下创建模式时,mnesia 会创建一个名为 "Mnesia.#{node}" 的目录。这是 mnesia 准备的代码:

:mnesia.create_schema([node])
:mnesia.start
:mnesia.create_table(User,
  [
    attributes: [:name, :email],
    disc_copies: [node]
  ]
)

当我开始 2 个单独的 IEx 会话并进行一些事务查询时,它们似乎只发生在其中一个会话中。我从 :mnesia.info 输出中推断出这一点。

如何同步它们,或者这是预期的行为?

当一个人在没有明确指定节点名称的情况下启动 shell 时,它以 nonode@nohost:

启动
$ iex
Erlang/OTP 19 [erts-8.1] [source-e7be63d] ...
Interactive Elixir (1.5.0-dev) ...

iex(1)> node()
:nonode@nohost

Mnesia 本身是节点感知的。因此,您需要显式远程连接到节点,该节点知道 运行 mnesia。让我们开始一个名为 shell:

$ iex --sname mnesia # the node name is arbitrary
iex(mnesia@localhost)1>

现在,让我们启动第二个 shell 并远程连接到第一个启动的 shell 。为此,只需启动 shell,然后按 CtrlG 进入 User switch command 模式并键入:

User switch command
--> r 'mnesia@localhost' 'Elixir.IEx'
--> c

现在你有两个 shells,连接到同一个节点,处理一个 mnesia 实例。

更多信息见the IEx docs on remote shells