我正在学习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输出。
我如何同步它们,还是预期的行为?
答案 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
实例。