如何在牛仔应用程序中为Mnesia指定目录?

Don*_*ino 1 erlang mnesia cowboy relx

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

Pau*_*yot 5

必须先通过应用程序配置参数将mnesia应用程序启动,然后才能将mnesia目录的路径提供给erlang VM。在Mnesia教程中,这是通过-Application par valVM参数语法完成的。

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

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

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

为此,请relx.config在文档中添加以下术语。

{sys_config, "./config/sys.config"}.
Run Code Online (Sandbox Code Playgroud)

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

[{mnesia, [{dir, "/path/to/dir"}]}].
Run Code Online (Sandbox Code Playgroud)

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

该vm.args文件实际上是通过-args_fileoption传递给VM的。这是带有参数的简单文本文件。

您将以下项添加到relx.config作为记录。

{vm_args, "./config/vm.args"}.
Run Code Online (Sandbox Code Playgroud)

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

-mnesia dir foo
Run Code Online (Sandbox Code Playgroud)

编写自己的启动脚本

relx实际上创建了一个启动脚本,它通过-config sys.config和args_file vm.args根据需要对虚拟机。您可以修改此脚本或滚动自己的脚本,以将-mnesia dir参数实际传递给VM。