Spec-Zone.ru › Elixir 1.15

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 был представлен в версии 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)Исходный код

Настраивает заданный 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, не поддерживают импорт, поскольку они предназначены для копирования между системами.

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

Spec-Zone.ru

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