Elixir語言中 Config.Provider
相關用法介紹如下。
指定在引導期間加載配置的提供程序 API。
配置提供程序通常在發布期間用於在係統啟動時加載外部配置。這是通過在運行的應用程序數量最少的情況下啟動 VM,然後調用所有提供程序,然後重新啟動係統來完成的。這需要磁盤上的可變配置文件,因為提供程序的結果被寫入文件係統。有關運行時配置的更多信息,請參閱
。mix release
多個配置文件
配置提供程序的一種常見用途是在一個版本中指定多個配置文件。 Elixir 附帶一個名為
的提供程序,它能夠處理 Elixir 的內置配置文件。Config.Reader
例如,假設您想在 Mix 的內置 config/runtime.exs
文件中列出一些基本配置,但您還想支持其他配置文件。為此,您可以將其添加到 mix.exs
的 def project
部分中:
releases: [
demo: [
config_providers: [
{Config.Reader, {:system, "RELEASE_ROOT", "/extra_config.exs"}}
]
]
]
您可以通過多種方式將此 extra_config.exs
文件放入您的版本中:
-
如果在組裝release時宿主機上可用,可以放在"rel/overlays/extra_config.exs",它會自動複製到release根目錄
-
如果在部署期間它在目標上可用,您可以簡單地將其複製到發布根目錄作為部署中的一個步驟
現在,一旦係統啟動,它將在啟動過程的早期加載 config/runtime.exs
和 extra_config.exs
。您可以在
上了解更多選項。Config.Reader
自定義配置提供程序
您還可以實現自定義配置提供程序,類似於
的工作方式。例如,假設您需要從 JSON 文件加載一些配置並將其加載到係統中。所述配置提供程序如下所示:Config.Reader
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 Config.config_env用法及代碼示例
- Elixir Config.config用法及代碼示例
- Elixir Config.Reader用法及代碼示例
- Elixir Config.Reader.merge用法及代碼示例
- Elixir Config.import_config用法及代碼示例
- Elixir Config.config_target用法及代碼示例
- Elixir Config用法及代碼示例
- Elixir Code.prepend_path用法及代碼示例
- Elixir Code.compiler_options用法及代碼示例
- Elixir Code.quoted_to_algebra用法及代碼示例
- Elixir Code.put_compiler_option用法及代碼示例
- Elixir Code用法及代碼示例
- Elixir Code.ensure_compiled用法及代碼示例
- Elixir Code.format_string!用法及代碼示例
- Elixir Code.required_files用法及代碼示例
- Elixir Collectable用法及代碼示例
- Elixir Code.get_compiler_option用法及代碼示例
- Elixir Code.Fragment.cursor_context用法及代碼示例
- Elixir Code.available_compiler_options用法及代碼示例
- Elixir Code.ensure_loaded?用法及代碼示例
- Elixir Code.eval_quoted用法及代碼示例
- Elixir Code.require_file用法及代碼示例
- Elixir Code.Fragment.container_cursor_to_quoted用法及代碼示例
- Elixir Code.Fragment.surround_context用法及代碼示例
- Elixir Code.delete_path用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Config.Provider。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。