Для статической конфигурации в моих собственных проектах мне нравится опция (1). Я покажу вам шаги, которые я предпринимаю для доступа к параметру конфигурации с именем max_widgets
в приложении с именем factory
.
Сначала мы создадим модуль с именем factory_env
, который содержит следующее:
-define(APPLICATION, factory).
get_env(Key, Default) ->
case application:get_env(?APPLICATION, Key) of
{ok, Value} -> Value;
undefined -> Default
end.
set_env(Key, Value) ->
application:set_env(?APPLICATION, Key, Value).
Далее, в модуле, который должен прочитать max_widgets
, мы определим макрос следующим образом:
-define(MAX_WIDGETS, factory_env:get_env(max_widgets, 1000)).
В этом подходе есть несколько приятных моментов:
- Поскольку мы использовали
application:set_env/3
и application:get_env/2
, нам на самом деле не нужно запускать приложение factory
, чтобы пройти наши тесты.
max_widgets
получает значение по умолчанию, поэтому наш код будет работать, даже если параметр не определен.
- Второй модуль может использовать другое значение по умолчанию для
max_widgets
.
Наконец, когда мы будем готовы к развертыванию, мы поместим файл sys.config в наш каталог priv
и загрузим его с -config priv/sys.config
во время запуска. Это позволяет нам изменять параметры конфигурации для каждого узла, если это необходимо. Это четко отделяет конфигурацию от кода - например, нам не нужно делать еще один коммит, чтобы изменить max_widgets
на 500.