我正在学习Elixir并需要一些帮助。我有一个使用mnesia
的简单应用(暂时不是Amnesia
)。当我开始mnesia
时,我做了:
:mnesia.create_schema([node()])
:mnesia.create_table(Table, [attributes: [:id, :name]])
:mnesia.start
这会创建一个Mnesia.nonode@nohost
目录。我想要的是拥有至少2个不同的数据库,一个用于测试,一个用于开发。我目前正在使用Mix.env
进行检查。我计划在每次应用程序停止时擦除测试数据库,并在每次启动时创建它(使用start
和stop
方法)。
由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
必须在目录路径周围使用单引号(不知道为什么)
答案 0 :(得分:3)
为不同的环境建立单独的mnesia
数据库的最简单方法是在应用程序配置中指定Mix.env
。您可以在config.exs
:
config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}'
但是您需要注意一些重要事项: