Spec-Zone.ru › Elixir 1.16

Источник 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 как замена 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)

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

Функции

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)Источник

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

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

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

Примеры

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

import_config "#{config_env()}.exs"

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

Скачать ePub версию

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

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

Spec-Zone.ru

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