【发布时间】:2011-03-10 03:41:50
【问题描述】:
有没有一个标准的地方可以将 mnesia 数据库放在 erlang 中?目前我把它放在 priv 目录中。
【问题讨论】:
有没有一个标准的地方可以将 mnesia 数据库放在 erlang 中?目前我把它放在 priv 目录中。
【问题讨论】:
默认情况下,Mnesia 将在模拟器进程当前目录的名为Mnesia.<node name> 的子目录中创建模式。
如果这不是您想要的,您只需将 Mnesia 的 dir 应用程序变量设置为类似
application:set_env(mnesia, dir, "/path/to/db").
至于放置数据库的位置:这取决于您的部署方案。自申请以来
也可以使用release config files 或command line arguments 设置变量,您可以延迟
在您发货(或安装在您自己的服务器上)之前做出决定。为了在生产中使用,应该使用像 /var/lib/<your application>/mnesia-<node name>(在 unix 上)这样的标准目录。
为了玩转,我建议使用代码根目录下的专用目录(而不是 priv 目录)并在应用程序的启动部分中设置该位置。 在我的宠物项目中,我经常使用诸如
之类的代码Root = filename:absname_join(filename:dirname(?FILE), ".."),
application:set_env(mnesia, dir, filename:join(Root, "db")).
正是为了这个目的。
【讨论】:
据我所知,当您创建架构时,每个节点都会在其根目录中创建一个架构目录。
因此,我猜这可以被认为是默认位置。
如果由于某种原因,您必须在应用程序中包含架构,那么我想 priv 文件夹应该没问题,因为 it is supposed to be used for application specific files 并且可以通过 @987654322 轻松访问@函数。
【讨论】: