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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。