如何定义配置文件变量?
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
).
我有一个配置文件:
{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
).