gpt4 book ai didi

erlang - 无法设置 Mnesia

转载 作者:行者123 更新时间:2023-12-04 22:00:15 24 4
gpt4 key购买 nike

setup_mnesia(Name) ->
?VALUE(application:start(mnesia)),
?VALUE(mnesia:create_schema([node()|[Name]])),
?VALUE(mnesia:create_table(muppet, [
{attributes, record_info(fields, muppet)},
{disc_copies, [foo@kos13]}])),
?VALUE(mnesia:wait_for_tables([muppet], infinity)),
ok.

结果是

"application : start ( mnesia )" = ok

"mnesia : create_schema ( [ node ( ) | [ Name ] ] )" = {error, {foo@kos13, {already_exists, foo@kos13}}}

"mnesia : create_table ( muppet , [ { attributes , record_info ( fields , muppet ) } , { disc_copies , [ foo@kos13 ] } ] )" = {aborted, {bad_type, muppet, disc_copies, foo@kos13}}



已编辑、已添加
如果重写两个进程以在 mnesia:create_schema 之后调用 application:start 它会吐出“无法安装回退”。在当前目录中出现两个文件 - FALLBACK.BUP 和 foo@kos13131851070846165246847780。

最佳答案

我确实认为,由于您正在尝试制作 disc_copies 表,因此您需要在启动 erlang 节点时设置 mnesia 目录的位置。

erl -mnesia dir db_dir

编辑:
好的,我创建了自己的示例,我为您提供了更多信息,我将发布我运行的命令

运行你的erlang节点:
erl -sname mnesiatest -mnesia dir db

启动 mnesia 并检查信息
(mnesiatest@host)1> mnesia:start().
ok
(mnesiatest@host)2> mnesia:info().
...
opt_disc. Directory "/home/user/test/db" is NOT used.
use fallback at restart = false
running db nodes = [mnesiatest@host]
stopped db nodes = []
master node tables = []
remote = []
ram_copies = [schema]
disc_copies = []
disc_only_copies = []
[{mnesiatest@host,ram_copies}] = [schema]

检查第三行,您会看到 "/home/user/test/db"未使用。"

解决方案:

在启动 mnesia 之前,您必须创建模式,而不是相反。我知道这似乎不合逻辑,但就像先配置然后开始一样。

所以你也是:
 (mnesiatest@host)3> mnesia:stop().
...
(mnesiatest@host)4> mnesia:create_schema([node()]).
ok
(mnesiatest@host)5> mnesia:start().
ok
(mnesiatest@host)6> mnesia:info().
...
opt_disc. Directory "/home/user/test/db" is used.
...

现在如果你运行 mnesia:create_table(...) 你应该成功了。
同样,如果您使用相同的目录重新启动节点,您将创建表并使用持久数据。

希望这有帮助。

关于erlang - 无法设置 Mnesia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com