在Elixir中处理测试和Dev Mnesia数据库

时间:2017-02-01 13:02:04

标签: elixir mnesia

我正在学习Elixir并需要一些帮助。我有一个使用mnesia的简单应用(暂时不是Amnesia)。当我开始mnesia时,我做了:

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

这会创建一个Mnesia.nonode@nohost目录。我想要的是拥有至少2个不同的数据库,一个用于测试,一个用于开发。我目前正在使用Mix.env进行检查。我计划在每次应用程序停止时擦除测试数据库,并在每次启动时创建它(使用startstop方法)。

mnesia创建的数据目录采用Erlang VM的名称,这就是为什么我想我需要根据环境命名我的VM(:dev:test或{ {1}})。

这可能吗?这是正确的方法吗?

更新

我知道我可以选择存储我的mnesia数据库的数据(谢谢Maryna)。但是当我指定一个" custom"目录,我有这种奇怪的行为:

:prod

所以我可以看到它知道我想要存储我的数据的位置,但它告诉我"未使用"。我不知道为什么......然后

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

它无法创建架构(当我没有指定&#34; custom&#34;目录时工作正常)。有什么想法吗?

更新2

必须在目录路径周围使用单引号(不知道为什么)

1 个答案:

答案 0 :(得分:3)

为不同的环境建立单独的mnesia数据库的最简单方法是在应用程序配置中指定Mix.env。您可以在config.exs

中添加类似的内容
config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}'

但是您需要注意一些重要事项:

  • 使用必须使用单引号而不是双引号
  • 数据库的父目录必须存在,否则将失败。 (当您未指定自定义路径时它没有失败的原因是因为您的app目录已存在)
相关问题