gpt4 book ai didi

elixir - 在 Elixir 中处理测试和开发 Mnesia 数据库

转载 作者:行者123 更新时间:2023-12-02 08:14:38 28 4
gpt4 key购买 nike

我正在学习 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:prod)。

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

<小时/>

更新

我知道我可以选择 mnesia 数据库数据的存储位置(谢谢玛丽娜)。但是当我指定“自定义”目录时,我有这种奇怪的行为:

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

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

最佳答案

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

config :mnesia, dir: 'mnesia/#{Mix.env}/#{node()}'
<小时/>

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

  • 使用必须使用单引号而不是双引号
  • 数据库的父目录必须存在,否则将会失败。 (当您不指定自定义路径时不会失败的原因是您的应用目录已存在)

关于elixir - 在 Elixir 中处理测试和开发 Mnesia 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41980495/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com