Erlang Mnesia-指定存储策略时,由于错误类型而中止

Erlang Mnesia-指定存储策略时,由于错误类型而中止,erlang,mnesia,Erlang,Mnesia,所以我得到了{aborted,{bad_type,link,disc_copies,'我的_server@127.0.0.1'}}(由myinit_db/0函数返回): 如果没有{disc_copies,[node()]}表是正确创建的 验证您通过应用程序:set_env/3指定的mnesia目录的父目录的写入权限。如果mnesia dir父目录不允许您写入,则会出现此错误。(获取此错误的另一种方法是忘记完全设置mnesia dir,但您的set_env调用显然正在这样做。) 更新:仔细查看您报

所以我得到了
{aborted,{bad_type,link,disc_copies,'我的_server@127.0.0.1'}}
(由my
init_db/0
函数返回):


如果没有
{disc_copies,[node()]}
表是正确创建的

验证您通过
应用程序:set_env/3
指定的mnesia目录的父目录的写入权限。如果mnesia dir父目录不允许您写入,则会出现此错误。(获取此错误的另一种方法是忘记完全设置mnesia dir,但您的
set_env
调用显然正在这样做。)

更新:仔细查看您报告的错误,我发现错误中提到的节点不在列表中:

{中止,{类型错误,链接,光盘拷贝,'我的_server@127.0.0.1'}}

这可能意味着您在问题中显示的代码与实际运行的代码不匹配。具体来说,如果调用
mnesia:create_table/2
传递一个节点,而不是
disc\u copies
元组中的节点列表,如下所示,您将得到相同的准确错误:

mnesia:create_table(link,[{index,[timestamp]},
                          {attributes, record_info(fields, link)},
                          {disc_copies, node()}]). % note no list here, should be [node()]

您可能需要将
schema
表更改为
disc\u copies
,这似乎会影响整个节点

mnesia:change_table_copy_type(模式,节点(),光盘副本)
从mnesia文档:

此函数还可用于更改名为schema的表的存储类型。架构表的存储类型只能是ram\U副本或磁盘\U副本。如果架构的存储类型为ram_copies,则该节点上不能有其他表驻留在磁盘上


在此之后,您应该能够在节点上创建
disc\u副本
表。

谢谢您的回答。不幸的是,在确保访问权限正常后,我仍然会出现错误。@Update-您的说法不完全正确。错误表明没有节点列表,但只传递了一个节点,但与上面粘贴的代码完全相同。对我来说这看起来很可疑,所以我甚至在绝望中试图传递
{disc\u copies,[[node()]]}
,得到
{aborted,{bad\u type,link,['my]_server@127.0.0.1']}}
mnesia:create_table(link,[{index,[timestamp]},
                          {attributes, record_info(fields, link)},
                          {disc_copies, node()}]). % note no list here, should be [node()]