如何定义配置文件变量?

How to define config file variables?

我有一个配置文件:

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

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

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

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

如果您只需要在启动应用程序时存储配置 - 您可以使用在 '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
).