Анализ целочисленных и логических настраиваемых переменных в config.exs - PullRequest
1 голос
/ 06 августа 2020

У меня есть конфигурация, в которой я хочу передавать логические и целочисленные переменные как env.

BOOLEAN_VARIABLE=false
INTEGER_VARIABLE=5000

У меня также есть конфигурация по умолчанию, которую я хочу установить, если заданная переменная env не найдена. Здесь я устанавливаю значение по умолчанию boolean_variable в значение true, а для integer_variable значение по умолчанию - 2000.

boolean_variable =
  case System.get_env("BOOLEAN_VARIABLE") do
    "false" -> false
    _ -> true
  end

integer_variable =
  case System.get_env("INTEGER_VARIABLE") do
    nil -> 2000
    value -> String.to_integer(value)
  end

Я закончил с десятками вызовов в конфигурации при анализе этих переменных в config.exs. Мне было любопытно, есть ли лучший способ получить эту конфигурацию.

1 Ответ

2 голосов
/ 06 августа 2020

Вы можете сохранить их как переменные среды. У вас может быть .env или какой-то другой файл, в котором вы храните переменные среды. Затем в ваших config файлах вы можете их читать + вы можете установить значение по умолчанию.

Вот пример.

.env file
BOOLEAN_VARIABLE=false
INTEGER_VARIABLE=4000

System.get_env/2 function может иметь строковое значение по умолчанию в качестве второго аргумента.

В вашем коде эликсира вы можете:

System.get_env("BOOLEAN_VARIABLE", "false") |> Config.parse_boolean
System.get_env("INTEGER_VARIABLE", "2000") |> Config.parse_integer # or String.to_integer

Преимущество этого подхода:

  • Ваши настраиваемые переменные считываются из среды
  • Значение легко изменить непосредственно в файле .env, а затем просто передать его с помощью команды source .env.
  • Для docker и docker -compose , вы можете напрямую установить переменные.
  • Ваше приложение elixir & phoenix останется модульным.
  • Вы можете избежать зависимостей во время компиляции, которые могут привести к очень непредсказуемому поведению в различных средах.
...