【问题标题】:How to specify directory for mnesia in cowboy application?如何在牛仔应用程序中为 mnesia 指定目录?
【发布时间】:2014-07-01 09:02:05
【问题描述】:

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

【问题讨论】:

    标签: erlang mnesia cowboy relx


    【解决方案1】:

    在通过应用程序配置参数启动 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.config 和args_file vm.args 传递给VM。您可以修改此脚本或自行编写脚本以将 -mnesia dir 参数实际传递给 VM。

    【讨论】:

    • 对答案进行了编辑,详细介绍了 Github 上引发的所有三种解决方案。
    • 非常感谢您的扩展回答!
    • 在第一种方法中我遇到了错误,但通过将 [{mnesia, {dir, "/path/to/dir"}}] 更改为 [{mnesia, [{dir, "/path/to/dir"}]}] 来修复它
    • 确实,我相应地修复了示例。
    【解决方案2】:

    如果是vm.args,planit text -mnesia dir foo 无效,请使用格式: -mnesia {dir,foo}

    【讨论】:

    • 您建议的格式似乎不起作用,至少在 erlang OTP 23 下。格式仍然是 -mnesia dir foo,更准确地说:-mnesia dir '"/path/to/your/data"'
    猜你喜欢
    • 2013-09-17
    • 2010-12-22
    • 2017-11-29
    • 2017-09-04
    • 2017-06-14
    • 2017-06-22
    • 2013-12-19
    • 2016-03-07
    • 2015-11-03
    相关资源
    最近更新 更多