【发布时间】:2017-09-24 21:48:25
【问题描述】:
我有一个使用 Mnesia 数据库的 Elixir 应用程序。它工作正常,我可以毫无问题地存储和检索数据。我现在正在研究如何备份该数据库,并阅读文档,发现有一个 :mnesia.backup 函数应该可以满足我的需求。但是,当我调用它时,我得到:
:mnesia.backup("myfile")
{:error, {:EXIT, {:error, :function_clause}}}
日志显示:
[error] Mnesia(:nonode@nohost): ** ERROR ** Failed to abort backup. :mnesia_backup::abort_write["myfile"] -> {:badrecord, :backup}
日志中的那一行令人困惑,因为我根本没有尝试中止备份。
:function_clause 错误表明在某处传递了一个无效参数,因此我在网上搜索以查看我应该将什么传递给 backup 函数(Erlang 文档对此特别不清楚)并发现这个问题表明它应该是备份文件的名称:what is the proper way to backup/restore a mnesia database?
我查看了 mnesia 代码,看看是否能找到任何明显但没有乐趣的地方。
谁能告诉我我做错了什么吗?
我在 Ubuntu 16.04 上使用带有 Erlang/OTP 19 的 Elixir 1.4.1,如果需要,我有一个基本代码示例来演示问题。
【问题讨论】:
-
试试单引号:
:mnesia.backup('myfile'). -
这行得通,证明我仍然需要弄清楚 Elixir 中二进制文件、字符串和字符列表之间的区别,谢谢!您介意将此作为答案,以便我接受它作为正确答案吗?
-
基本上——Erlang 没有字符串,只有字符列表,所以在 Erlang 的模块中使用字符串是行不通的。
标签: erlang backup elixir mnesia