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, не поддерживают импорт, поскольку они предназначены для копирования между системами.
© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.17.2/Config.html