如何在牛仔应用程序中指定mnesia的目录?

时间:2014-05-13 15:28:35

标签: erlang mnesia cowboy relx

有没有办法在牛仔应用中指定架构的路径?也许可以在my_app.app.src或任何配置文件中设置?

2 个答案:

答案 0 :(得分:4)

在通过应用程序配置参数启动mnesia应用程序之前,必须将mnesia目录的路径提供给erlang VM。在Mnesia tutorial中,这是使用-Application par val VM参数语法完成的。

你所谓的牛仔应用程序可能是一个Erlang OTP版本(由relx根据牛仔教程构建)。 Cowboy issue #595中快速描述的解决方案如下:

解决方案之间的选择实际上取决于风格以及一些约束。任何足够复杂的版本都会使用配置文件,因此它是一个不错的选择。 vm.args似乎更容易处理。最终,您可能需要更改启动脚本(例如,从单个部署中运行多个节点),并包含一些逻辑来定义mnesia目录。

为relx提供配置文件(sys_config选项)

为此,请将以下字词添加到relx.config documented

{sys_config, "./config/sys.config"}.

sys.config实际上是标准的Erlang配置文件,也是documented。通过为mnesia应用程序添加一个部分来指定mnesia目录。如果不需要其他配置,则文件为:

[{mnesia, [{dir, "/path/to/dir"}]}].

获取relx以将参数传递给vm(vm_args选项)

vm.args文件实际上是通过-args_file option传递给VM的。这是一个带参数的简单文本文件。

您可以将以下字词添加到relx.config documented

{vm_args, "./config/vm.args"}.

并将以下内容放在vm.args文件中:

-mnesia dir foo

编写自己的启动脚本

relx实际上会创建一个启动脚本,根据需要将-config sys.configargs_file vm.args传递给VM。您可以修改此脚本或自行滚动以将-mnesia dir参数实际传递给VM。

答案 1 :(得分:0)

在vm.args的情况下,planit text -mnesia dir foo无效,请使用格式: -mnesia {dir,foo}