Spec-Zone.ru › Elixir 1.18

Исходный код Config

Простой API конфигурации на основе ключевых слов.

Пример

Этот модуль чаще всего используется для определения конфигурации приложения, обычно в config/config.exs:

import Config

config :some_app,
  key1: "value1",
  key2: "value2"

import_config "#{config_env()}.exs"

import Config будет импортировать функции config/2, config/3 config_env/0, config_target/0 и import_config/1, чтобы помочь вам управлять вашей конфигурацией.

config/2 и config/3 используются для определения конфигурации ключ-значение для данного приложения. После запуска Mix он автоматически оценит файл конфигурации и сохранит указанную выше конфигурацию в среде приложения :some_app, к которой можно получить доступ следующим образом:

"value1" = Application.fetch_env!(:some_app, :key1)

Наконец, строка import_config "#{config_env()}.exs" импортирует другие файлы конфигурации на основе текущей среды конфигурации, такие как config/dev.exs и config/test.exs.

Config также предоставляет низкоуровневый API для оценки и чтения конфигурации в модуле Config.Reader.

Избегайте среды приложения в библиотеках

Если вы пишете библиотеку для использования другими разработчиками, рекомендуется избегать среды приложения, так как среда приложения фактически является глобальным хранилищем. Обратите также внимание, что среда приложения библиотеки не оценивается при использовании библиотеки в качестве зависимости, так как конфигурация всегда предназначена для настройки текущего проекта. Дополнительную информацию можно найти в "Использование конфигурации приложения для библиотек".

Миграция из use Mix.Config

Модуль Config в Elixir был представлен в версии v1.9 в качестве замены use Mix.Config, который был специфичен для Mix и устарел.

Вы можете использовать Config вместо use Mix.Config в три шага. Первый шаг - заменить use Mix.Config в верхней части ваших файлов конфигурации на import Config.

Второй - убедиться, что ваши вызовы import_config/1 не содержат символа подстановки. В противном случае вам необходимо выполнить поиск подстановки вручную. Например, если вы сделали:

import_config "../apps/*/config/config.exs"

Его нужно заменить на:

for config <- "../apps/*/config/config.exs" |> Path.expand(__DIR__) |> Path.wildcard() do
  import_config config
end

Последний шаг - заменить все вызовы Mix.env() в файлах конфигурации на config_env().

Помните, что вам также следует избегать использования Mix.env() внутри ваших файлов проекта. Для проверки среды во время работы вы можете добавить ключ конфигурации:

# config.exs
...
config :my_app, env: config_env()

Затем в других скриптах и модулях вы можете получить среду с помощью Application.fetch_env!/2:

# router.exs
...
if Application.fetch_env!(:my_app, :env) == :prod do
  ...
end

Единственные места, где вы можете получить доступ к функциям модуля Mix, это файл mix.exs и внутри пользовательских задач Mix, которые всегда находятся в пространстве имен Mix.Tasks.

config/runtime.exs

Для конфигурации во время выполнения можно использовать файл config/runtime.exs. Он выполняется непосредственно перед запуском приложений как в Mix, так и в релизах (собранных с помощью mix release).

Краткое описание

Функции

config(root_key, opts)

Настраивает заданный root_key.

config(root_key, key, opts)

Настраивает заданный key для данного root_key.

config_env()

Возвращает среду, в которой выполняется данный файл конфигурации.

config_target()

Возвращает целевую среду, в которой выполняется данный файл конфигурации.

import_config(file)

Импортирует конфигурацию из указанного файла.

read_config(root_key)

Считывает конфигурацию для заданного корневого ключа.

Функции

config(root_key, opts)Исходный код

Настраивает заданный root_key.

Список ключевых слов всегда глубоко сливается.

Примеры

Указанные opts объединяются с существующей конфигурацией для заданного root_key. Конфликтующие ключи перезаписываются значениями, указанными в opts, за исключением случаев, когда они являются ключевыми словами, которые рекурсивно глубоко сливаются. Например, следующая конфигурация приложения

config :logger,
  level: :warn,
  backends: [:console]

config :logger,
  level: :info,
  truncate: 1024

будет иметь окончательную конфигурацию для :logger:

[level: :info, backends: [:console], truncate: 1024]

config(root_key, key, opts)Исходный код

Настраивает заданный key для данного root_key.

Список ключевых слов всегда глубоко сливается.

Примеры

Указанные opts объединяются с существующими значениями для key в заданном root_key. Конфликтующие ключи перезаписываются значениями, указанными в opts, за исключением случаев, когда они являются ключевыми словами, которые рекурсивно глубоко сливаются. Например, следующая конфигурация приложения

config :ecto, Repo,
  log_level: :warn,
  adapter: Ecto.Adapters.Postgres,
  metadata: [read_only: true]

config :ecto, Repo,
  log_level: :info,
  pool_size: 10,
  metadata: [replica: true]

будет иметь окончательное значение конфигурации для ключа Repo в приложении :ecto:

Application.get_env(:ecto, Repo)
#=> [
#=>   log_level: :info,
#=>   pool_size: 10,
#=>   adapter: Ecto.Adapters.Postgres,
#=>   metadata: [read_only: true, replica: true]
#=> ]

config_env()Исходный код

Возвращает среду, в которой выполняется данный файл конфигурации.

В проектах Mix эта функция возвращает среду, в которой выполняется данный файл конфигурации. В релизах - среду, в которой выполнялся mix release.

Это чаще всего используется для выполнения условного кода:

if config_env() == :prod do
  config :my_app, :debug, false
end

config_target()Исходный код

Возвращает целевую среду, в которой выполняется данный файл конфигурации.

Это чаще всего используется для выполнения условного кода:

if config_target() == :host do
  config :my_app, :debug, false
end

import_config(file)Исходный код

Импортирует конфигурацию из указанного файла.

В случае, если файл не существует, генерируется ошибка.

Если файл является относительным, он будет расширен относительно директории, в которой находится текущий файл конфигурации.

Примеры

Это часто используется для эмуляции конфигурации в разных средах:

import_config "#{config_env()}.exs"

Однако некоторые файлы конфигурации, такие как config/runtime.exs не поддерживают импорты, так как они предназначены для копирования между системами.

read_config(root_key)Исходный код

Считывает конфигурацию для заданного корневого ключа.

Эта функция считывает конфигурацию только из предыдущего вызова config/2 или config/3. Если root_key указывает на приложение, оно не считывает его фактическую среду приложения. Его основное применение - упростить доступ к значениям конфигурации и обмен ими между файлами.

Если root_key не был настроен, возвращается nil.

Примеры

# In config/config.exs
config :my_app, foo: :bar

# In config/dev.exs
config :another_app, foo: read_config(:my_app)[:foo] || raise "missing parent configuration"

Загрузить версию ePub

Создано с помощью ExDoc (v0.36.1) для язык программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.18.1/Config.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API