必须先通过应用程序配置参数将mnesia应用程序启动,然后才能将mnesia目录的路径提供给erlang VM。在Mnesia教程中,这是通过-Application par valVM参数语法完成的。
您所谓的牛仔应用程序可能是Erlang OTP版本(由relx根据牛仔教程构建)。在Cowboy问题#595中快速描述的解决方案如下。
解决方案之间的选择实际上取决于样式以及一些约束。任何足够复杂的发行版都将使用配置文件,因此这是一个不错的选择。vm.args似乎更容易处理。最终,您可能需要更改启动脚本(例如,从一个部署中运行多个节点),并包含一些逻辑来定义mnesia目录。
为此,请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)
该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。