当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Config.Provider用法及代码示例


Elixir语言中 Config.Provider 相关用法介绍如下。

指定在引导期间加载配置的提供程序 API。

配置提供程序通常在发布期间用于在系统启动时加载外部配置。这是通过在运行的应用程序数量最少的情况下启动 VM,然后调用所有提供程序,然后重新启动系统来完成的。这需要磁盘上的可变配置文件,因为提供程序的结果被写入文件系统。有关运行时配置的更多信息,请参阅 mix release

多个配置文件

配置提供程序的一种常见用途是在一个版本中指定多个配置文件。 Elixir 附带一个名为 Config.Reader 的提供程序,它能够处理 Elixir 的内置配置文件。

例如,假设您想在 Mix 的内置 config/runtime.exs 文件中列出一些基本配置,但您还想支持其他配置文件。为此,您可以将其添加到 mix.exsdef project 部分中:

releases: [
  demo: [
    config_providers: [
      {Config.Reader, {:system, "RELEASE_ROOT", "/extra_config.exs"}}
    ]
  ]
]

您可以通过多种方式将此 extra_config.exs 文件放入您的版本中:

  1. 如果在组装release时宿主机上可用,可以放在"rel/overlays/extra_config.exs",它会自动复制到release根目录

  2. 如果在部署期间它在目标上可用,您可以简单地将其复制到发布根目录作为部署中的一个步骤

现在,一旦系统启动,它将在启动过程的早期加载 config/runtime.exsextra_config.exs。您可以在 Config.Reader 上了解更多选项。

自定义配置提供程序

您还可以实现自定义配置提供程序,类似于 Config.Reader 的工作方式。例如,假设您需要从 JSON 文件加载一些配置并将其加载到系统中。所述配置提供程序如下所示:

defmodule JSONConfigProvider do
  @behaviour Config.Provider

  # Let's pass the path to the JSON file as config
  @impl true
  def init(path) when is_binary(path), do: path

  @impl true
  def load(config, path) do
    # We need to start any app we may depend on.
    {:ok, _} = Application.ensure_all_started(:jason)

    json = path |> File.read!() |> Jason.decode!()

    Config.Reader.merge(
      config,
      my_app: [
        some_value: json["my_app_some_value"],
        another_value: json["my_app_another_value"],
      ]
    )
  end
end

然后,在指定发布时,您可以在发布配置中指定提供者:

releases: [
  demo: [
    config_providers: [
      {JSONConfigProvider, "/etc/config.json"}
    ]
  ]
]

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Config.Provider。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。