Конфигурация
Простой API конфигурации на основе ключевых слов.
Пример
Этот модуль чаще всего используется для определения конфигурации приложения, обычно в config/config.exs:
import Config
config :some_app,
key1: "value1",
key2: "value2"
import_config "#{Mix.env()}.exs" import Config будет импортировать функции config/2, config/3 и import_config/1, чтобы помочь вам управлять вашей конфигурацией.
config/2 и config/3 используются для определения конфигурации ключ-значение для данного приложения. После запуска Mix он автоматически оценит файл конфигурации и сохранит указанную выше конфигурацию в среде приложения :some_app, к которой можно получить доступ следующим образом:
"value1" = Application.fetch_env!(:some_app, :key1)
Наконец, строка import_config "#{Mix.env()}.exs" импортирует другие файлы конфигурации, основанные на текущей среде Mix, такие как config/dev.exs и config/test.exs.
Config также предоставляет API низкого уровня для оценки и чтения конфигурации в модуле Config.Reader.
Важно: если вы пишете библиотеку для использования другими разработчиками, рекомендуется избегать использования среды приложения, так как она фактически является глобальным хранилищем. Для получения дополнительной информации, прочитайте наши руководящие принципы для библиотек.
Миграция из use Mix.Config
Модуль Config в Elixir был представлен в версии v1.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
config/releases.exs
Если вы используете релизы, см. mix release, там есть еще один файл конфигурации, называемый config/releases.exs. В то время как config/config.exs и другие функции, упомянутые в предыдущем разделе, выполняются всякий раз, когда вы запускаете команду Mix, включая сборку релиза, config/releases.exs выполняется каждый раз при запуске вашей производственной системы. Поскольку Mix недоступен в производственной системе, config/releases.exs не должен использовать какие-либо функции из Mix.
Резюме
Функции
- config(root_key, opts)
Настраивает заданный
root_key.- config(root_key, key, opts)
Настраивает заданный
keyдля данногоroot_key.- 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 config :ecto, Repo, log_level: :info, pool_size: 10
будет иметь конечное значение конфигурации для ключа Repo в приложении :ecto:
[log_level: :info, pool_size: 10, adapter: Ecto.Adapters.Postgres]
import_config(file)
Импортирует конфигурацию из указанного файла.
В случае отсутствия файла генерируется ошибка.
Если file является относительным, он будет расширен относительно директории, в которой находится текущий файл конфигурации.
Примеры
Это часто используется для эмуляции конфигурации в разных средах:
import_config "#{Mix.env()}.exs"
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.9.4/Config.html