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

时间:2016-12-11 17:59:33

标签: erlang elixir mnesia

我正在学习Erlang的mnesia数据库并试图在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输出。

我如何同步它们,还是预期的行为?

1 个答案:

答案 0 :(得分:1)

如果没有明确指定的节点名称启动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,然后按 Ctrl G 进入User switch command模式并输入:

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

现在,您有两个连接到同一节点的shell,用于处理mnesia实例。

More info