在Elixir中处理测试和开发记忆数据库
我正在学习长生不老药,需要一些帮助。我有一个简单的应用程序,它使用在Elixir中处理测试和开发记忆数据库,elixir,mnesia,Elixir,Mnesia,我正在学习长生不老药,需要一些帮助。我有一个简单的应用程序,它使用mnesia(现在不是健忘症)。当我开始记忆时,我会: :mnesia.create_schema([node()]) :mnesia.create_table(Table, [attributes: [:id, :name]]) :mnesia.start 这将创建一个Mnesia。nonode@nohost目录。我想要的是至少有两个不同的数据库,一个用于测试,一个用于开发。我目前正在使用Mix.env检查这个问题。我计划在每
mnesia
(现在不是健忘症
)。当我开始记忆时,我会:
:mnesia.create_schema([node()])
:mnesia.create_table(Table, [attributes: [:id, :name]])
:mnesia.start
这将创建一个Mnesia。nonode@nohost
目录。我想要的是至少有两个不同的数据库,一个用于测试,一个用于开发。我目前正在使用Mix.env
检查这个问题。我计划在每次应用程序停止时删除测试数据库,并在每次启动时创建它(使用start
和stop
方法)
由mnesia
创建的数据目录采用Erlang虚拟机的名称,这就是为什么我想我需要根据环境来命名虚拟机(:dev
,:test
或:prod
)
这可能吗?这条路对吗
更新 我知道我可以选择我的mnesia数据库的数据存储位置(谢谢Maryna)。但当我指定一个“自定义”目录时,我有一个奇怪的行为:
iex(1)> :mnesia.system_info()
===> System info in version {mnesia_not_loaded,nonode@nohost,
{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 = [nonode@nohost]
:no
创建模式失败(当我没有指定“自定义”目录时工作正常)。有什么想法吗
更新2
必须在目录路径周围使用单引号(不知道为什么)为不同环境使用单独的
mnesia
数据库的最简单方法是在应用程序配置中指定Mix.env
。您可以在config.exs
中放置类似的内容:
config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}'
但是有一些重要的事情你需要注意:
- 使用必须使用单引号而不是双引号
- 数据库的父目录必须存在,否则将失败。(不指定自定义路径时不会失败的原因是,应用程序目录已存在)
config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}'