解析 config.exs 中的整数和布尔可配置变量

Gur*_*der 5 elixir phoenix-framework

我有一个配置,我想将布尔值和整数变量作为环境传递。

BOOLEAN_VARIABLE=false
INTEGER_VARIABLE=5000
Run Code Online (Sandbox Code Playgroud)

如果找不到给定的环境变量,我还想设置默认配置。这里我将默认值设置为boolean_variabletrue,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
Run Code Online (Sandbox Code Playgroud)

在解析config.exs. 我很好奇是否有更好的方法来进行此配置。

arp*_*pit 6

您可以将它们保存为环境变量。您可以使用一个.env或其他一些文件来存储环境变量。然后在您的config文件中,您可以读取它们+您可以设置默认值。

这是一个例子。

.env file
BOOLEAN_VARIABLE=false
INTEGER_VARIABLE=4000
Run Code Online (Sandbox Code Playgroud)

System.get_env/2函数可以将基于字符串的默认值作为第二个参数。

在你的 Elixir 代码中你可以这样做:

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

这种方法的好处是:

  • 您的可配置变量是从环境中读取的
  • 直接在 .env 文件中更改值很容易,然后只需使用source .env命令获取它即可。
  • 对于docker和docker-compose,您可以直接设置变量。
  • 您的 Elixir & Phoenix 应用程序将保持模块化。
  • 您可以避免编译时依赖性,这可能会导致不同环境中非常不可预测的行为。