Конфиг в Erlang приложениях
Решил описать как правильно создать конфиг для erlang приложения, так как сам с этим немного помучался и не совсем однозначно это описано в официальной документации.
Предположим у нас есть приложение someclient, которому нужны настройки такие как логин и пароль. Для этого нам придется создать три файла: само приложение, файл описания приложения и файл конфигурации.
Приложение у нас будет просто выводить значения конфигурации “someclient.erl”
-module(someclient).
-export([start/0]).
start() ->
application:start(?MODULE),
io:format("all config values: ~p~n", [application:get_all_env(?MODULE)]),
{ok, ConfigValue} = application:get_env(?MODULE, login),
io:format("value form config: ~p~n", [ConfigValue]),
{ok, AppValue} = application:get_env(?MODULE, password),
io:format("value from app: ~p~n", [AppValue]).
Теперь создадим файл описания приложения “someclient.app”. В этом файле мы тоже можем указать конфигурационные параметры. Но как мы увидим при выполнении, если в конфигурационном файле есть такие же ключи, то они имеют более высокий приоритет и заменят значение своим.
{application, someclient, [
{env, [
{login, "login from app"},
{password, "password from app"}
]}
]}.
Ну и сам файл конфигурации “someclient.config”
[{someclient, [
{login, "login from config"}
]}].
Запускать все это нужно предварительно скомпилировав
$ erl -compile someclient.erl; erl -noshell -s someclient
all config values: [{login,"login from app"},
{password,"password from app"},
{included_applications,[]}]
value form config: "login from app"
value from app: "password from app"
Как видите, значение логина перезатерлось значением из конфигурационного файла.