當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。