Erlang: Как определить переменные файла конфигурации? - PullRequest
2 голосов
/ 06 марта 2019

Я новичок в Erlang, и у меня есть вопрос о файлах .config: у меня есть файл конфигурации с:

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

Путь и имя могут быть изменены пользователем.Как я знаю, есть способ сохранить эти переменные в модуле с помощью file:consult/1 в

-define(VARIABLE, <parsing of the config file>).

Есть ли более эффективные способы чтения файла конфигурации, когда модуль начинает работать, не делаяфункция синтаксического анализа в -define?(Как я знаю, по мнению разработчиков Erlang, это не лучший способ сделать сложные функции в -define)

Заранее спасибо.

1 Ответ

4 голосов
/ 06 марта 2019

Если вам нужно сохранить конфигурацию только при запуске приложения - вы можете использовать файл конфигурации приложения, который определен в '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

следующий шаг для создания 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
).
...