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.
Важно: если вы пишете библиотеку для использования другими разработчиками, рекомендуется избегать использования среды приложения, так как среда приложения фактически является глобальным хранилищем. Также обратите внимание, что среда config/config.exs библиотеки не оценивается при использовании библиотеки в качестве зависимости, так как конфигурация всегда предназначена для настройки текущего проекта. Для получения дополнительной информации, прочтите наши руководящие принципы для библиотек.
Миграция из use Mix.Config
Модуль Config в Elixir был представлен в версии 1.9 в качестве замены Mix.Config, который был специфичен для Mix и был устаревшим.
Вы можете использовать Config вместо 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().
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)
Импортирует конфигурацию из данного файла.
Функции
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 config :ecto, Repo, log_level: :info, pool_size: 10
будет иметь окончательное значение конфигурации для ключа Repo в приложении :ecto:
[log_level: :info, pool_size: 10, adapter: Ecto.Adapters.Postgres]
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)Исходный код
Импортирует конфигурацию из данного файла.
Если файл не существует, возникает ошибка.
Если file является относительным, он будет расширен относительно каталога, в котором находится текущий файл конфигурации.
Примеры
Это часто используется для эмуляции конфигурации в различных средах:
import_config "#{config_env()}.exs"
Обратите внимание, что некоторые файлы конфигурации, такие как config/runtime.exs, не поддерживают импорт, поскольку они предназначены для копирования между системами.
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.13.4/Config.html