【问题标题】:How to define config file variables?如何定义配置文件变量?
【发布时间】:2019-07-27 21:27:28
【问题描述】:

我有一个配置文件:

{path, "/mnt/test/"}.
{name, "Joe"}.

用户可以更改路径和名称。据我所知,有一种方法可以通过在

中使用 file:consult/1 将这些变量保存在模块中
-define(VARIABLE, <parsing of the config file>).

当模块开始工作而不在 -define 中创建解析函数时,有没有更好的方法来读取配置文件? (据我所知,根据 Erlang 开发人员的说法,在 -define 中创建复杂函数并不是最好的方法)

【问题讨论】:

    标签: configuration erlang erlang-otp


    【解决方案1】:

    如果您只需要在启动应用程序时存储配置 - 您可以使用在 'rebar.config' 中定义的应用程序配置文件

    {profiles, [
      {local,
        [{relx, [
          {dev_mode,      false},
          {include_erts,  true},
          {include_src,   false},
          {vm_args,       "config/local/vm.args"}]
          {sys_config,    "config/local/yourapplication.config"}]
         }]
      }
    ]}.
    

    更多信息在这里:rebar3 configuration

    下一步创建yourapplication.config - 将其存储在您的应用程序文件夹/app/config/local/yourapplication.config

    这个配置应该有这个例子的结构

    [
        {
            yourapplicationname, [
                {path, "/mnt/test/"},
                {name, "Joe"}
            ]
        }
    ].
    

    所以当您的应用程序启动时 您可以使用

    获取整个配置数据
    {ok, "/mnt/test/"} = application:get_env(yourapplicationname, path)
    {ok, "Joe"} = application:get_env(yourapplicationname, name)
    

    现在你可以像这样定义这个变量:

    -define(VARIABLE,
        case application:get_env(yourapplicationname, path) of
            {ok, Data} -> Data
            _   -> undefined
        end
    ).
    

    【讨论】:

    • 感谢您的详细解答!另一个问题是如何使这两个变量对模块全局?据我了解,唯一的方法是通过 application:get_env 在“-define”中声明变量,对吗?附:不使用 ets/dets/mnesia
    • @NickSaw 更新了答案(添加了 -define 变量)
    • 谢谢回复,我明白了
    猜你喜欢
    • 2019-02-23
    • 1970-01-01
    • 2013-01-04
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2022-10-15
    相关资源
    最近更新 更多