2017-04-27 82 views
1

我有一個使用Mnesia數據庫的Elixir應用程序。它工作正常,我可以存儲和檢索數據沒有問題。我現在正在考慮如何備份該數據庫,並通過閱讀文檔,發現有一個應該做我想做的功能的:mnesia.backup函數。然而,當我打電話吧,我得到:使用Elixir備份Mnesia數據庫

:mnesia.backup("myfile") {:error, {:EXIT, {:error, :function_clause}}}

,並將日誌顯示此:

[error] Mnesia(:[email protected]): ** 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上使用Elixir 1.4.1與Erlang/OTP 19,我有一個基本的代碼示例,如果需要的話可以演示這個問題。

+2

嘗試單引號:':mnesia.backup('myfile')'。 – Dogbert

+1

這是行得通的,並證明我仍然需要讓我的頭腦在Elixir中的二進制文件,字符串和char列表之間的區別,謝謝!你介意讓這個答案,以便我可以接受它作爲正確的答案嗎? –

+2

基本上 - Erlang沒有字符串,只是charlists,所以在Erlang模塊中使用字符串不起作用。 – PatNowak

回答

4

:mnesia.backup接受charlist作爲文件名,這些文件名用Erlang語法中的雙引號引起來,但在Elixir中用單引號引起來。下面應該工作:

:mnesia.backup('myfile') 

我強烈建議你通過這個official Elixir crash course快速回暖Erlang的語法,如果你知道靈藥語法,反之亦然。