Spec-Zone.ru › Elixir 1.14

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().

Помните, что вам также следует избегать использования 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)Source

Настраивает заданный 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)Source

Настраивает заданный 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()Source

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

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

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

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

config_target()Source

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

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

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

import_config(file)Source

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

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

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

Примеры

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

import_config "#{config_env()}.exs"

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

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.14.1/Config.html

Spec-Zone.ru

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