2016-12-11 14 views
0

私はErlangのmnesia DBを学習し、それをElixirアプリで使用しようとしています。ドキュメントによると、デフォルトでスキンを作成している間、mnesiaは "Mnesia。#{node}"という名前のディレクトリを作成します。ここでmnesiaの準備のためのコードは次のとおりです。同じノード上の2つの別々のIExセッションでのMnesia

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

私は2つの別々のIEXセッションを開始し、彼らが唯一のセッションのいずれかで起こっていると思われるいくつかのトランザクションのクエリを作成しています。私はこれをmnesia.infoの出力から推測しています。

どのように同期させることができますか、それとも期待される動作ですか?

答えて

1

1が明示的に指定したノード名を指定せずにシェルを起動すると、それは[email protected]としてスタートしています:

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

iex(1)> node() 
:[email protected] 

Mnesia自体がノードを認識しています。したがって、ノードに明示的にリモート接続する必要があります。これはmnesiaの実行を認識しています。のは、第2のシェルを起動して、リモートで最初に始めたシェルにを接続してみましょう、今

$ iex --sname mnesia # the node name is arbitrary 
iex([email protected])1> 

:名前のシェルを起動してみましょう。

User switch command 
--> r '[email protected]' 'Elixir.IEx' 
--> c 

は今、あなたはmnesiaインスタンスを扱う同じノードに接続された2つのシェルを持っている:ので、ちょうどシェルを起動するためには、その後、CtrlキーGUser switch commandモードとタイプを入力して押します。

More info

+0

ありがとうございます、私はすでにそれを試みており、うまくいくようです。しかし、デフォルトのノードが ':nonode @ nohost'の場合、両方のIExセッションが同じmnesiaインスタンスに接続されるべきではありませんか? – tokenvolt

+0

nonode @nohostはSQLではNULLのようにはまったくありません。彼らは名前付きノードではありません。 – mudasobwa

+0

ああ、そうだ。これはいくつかの洞察力を与える、ありがとう。 – tokenvolt

関連する問題