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

问题描述 投票:0回答:1

我正在学习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输出中推断出这一点。

我怎样才能同步它们,或者说这是一种预期的行为?

erlang elixir mnesia
1个回答
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,然后按下 CtrlG 进入 User switch command 模式和类型。

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

现在你有两个shell,连接到同一个节点上,处理一个... mnesia 例子。

更多信息请见 关于远程shell的IEx文档.

© www.soinside.com 2019 - 2024. All rights reserved.