我正在学习 Elixir,需要一些帮助。我有一个使用的简单应用程序mnesia(暂时不使用Amnesia)。当我开始时,mnesia我会这样做:
:mnesia.create_schema([node()])
:mnesia.create_table(Table, [attributes: [:id, :name]])
:mnesia.start
Run Code Online (Sandbox Code Playgroud)
这将创建一个Mnesia.nonode@nohost目录。我想要的是至少有 2 个不同的数据库,一个用于测试,一个用于开发。我目前正在使用Mix.env. 我计划在我的应用程序每次停止时擦除测试数据库,并在每次启动时创建它(使用start和stop方法)。
创建的数据目录mnesia采用 Erlang VM 的名称,这就是为什么我想我需要根据环境(:dev,:test或:prod)命名我的 VM 。
这可能吗?这是正确的方法吗?
更新
我知道我可以选择我的 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
Run Code Online (Sandbox Code Playgroud)
所以我可以看到它知道我想在哪里存储我的数据,但是它告诉我“没有使用”。我不知道为什么......然后
iex(2)> :mnesia.create_schema([node()])
{:error, {:EXIT, :function_clause}}
Run Code Online (Sandbox Code Playgroud)
创建架构失败(当我不指定“自定义”目录时工作正常)。有任何想法吗?
更新 2
必须在目录路径周围使用单引号(不知道为什么)
mnesia为不同环境拥有单独数据库的最简单方法是Mix.env在应用程序配置中指定。你可以把这样的东西放在你的config.exs:
config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}'
Run Code Online (Sandbox Code Playgroud)
但是有一些重要的事情你需要注意:
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |