2017-02-01 22 views
0

我正在學習Elixir並需要一些幫助。我有一個簡單的應用程序,使用mnesia(現在不是Amnesia)。當我開始mnesia我做的:在Elixir中處理測試和開發Mnesia數據庫

:mnesia.create_schema([node()]) 
:mnesia.create_table(Table, [attributes: [:id, :name]]) 
:mnesia.start 

這將創建一個[email protected]目錄。我想要的是至少有兩個不同的數據庫,一個用於測試,一個用於開發。我目前正在使用Mix.env進行檢查。我計劃在每次我的應用程序停止時擦除測試數據庫並在每次啓動時創建它(使用startstop方法)。

通過mnesia創建的數據目錄中取二郎神虛擬機的名稱,這就是爲什麼我想我需要根據環境(:dev:test:prod)來命名我的虛擬機。

這可能嗎?這是正確的方式嗎?


更新

我知道我可以選擇我的Mnesia數據庫的數據的存儲位置(謝謝你,瑪麗娜)。但是,當我指定「定製」目錄下,我有這種奇怪的行爲:

iex(1)> :mnesia.system_info() 
===> System info in version {mnesia_not_loaded,[email protected], 
           {1486,66262,472243}}, debug level = trace <=== 
opt_disc. Directory  <<"/my/custom/dir">> is NOT used. 
use fallback at restart = false 
running db nodes = [] 
stopped db nodes = [[email protected]] 
:no 

所以我可以看到,它知道我要存儲我的數據,但它在告訴我「不使用」。我不知道爲什麼......然後

iex(2)> :mnesia.create_schema([node()]) 
{:error, {:EXIT, :function_clause}} 

失敗創建模式(當我不指定「定製」目錄下正常工作)。有任何想法嗎?


更新2

必須使用周圍的目錄路徑單引號(不知道爲什麼)

+0

您可以通過定義目錄http://stackoverflow.com/questions/21150613訪問databa/IS-有-A-內置機制換我們對發射後的Mnesia功能於靈藥。行iex(2)>:應用程序。set_env(:mnesia,:dir,'sample') –

+0

Thank you Maryna for your input,it helps,but still encounter issues ... – rmonjo

+0

我看到更新,可能它會等待原子 –

回答

1

最簡單的方法有單獨mnesia數據庫,針對不同的環境中指定Mix.env您應用配置。你可以把這樣的事情在你的config.exs

config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}' 

但也有需要照顧的一些重要的事情:

  • 使用已使用單引號代替雙引號
  • 數據庫的父目錄必須存在,否則會失敗。 (當你不指定自定義路徑不失敗的原因是因爲你的應用程序目錄中已存在)