【发布时间】:2017-04-16 04:48:21
【问题描述】:
我正在学习 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 或 :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
所以我可以看到它知道我想在哪里存储我的数据,但是它告诉我“未使用”。不知道为什么……然后
iex(2)> :mnesia.create_schema([node()])
{:error, {:EXIT, :function_clause}}
创建架构失败(当我没有指定“自定义”目录时工作正常)。有什么想法吗?
更新 2
必须在目录路径周围使用单引号(不知道为什么)
【问题讨论】:
-
你可以通过定义dir stackoverflow.com/questions/21150613/…来访问databa。 line iex(2)> :application.set_env(:mnesia, :dir, 'sample')
-
感谢 Maryna 的意见,它有所帮助,但仍然遇到问题...
-
我看到了更新,可能,它正在等待原子