Spec-Zone.ru › Elixir 1.17

Source 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)

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

Функции

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

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

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

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

Примеры

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

import_config "#{config_env()}.exs"

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

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

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

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

Spec-Zone.ru

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