Environ - это библиотека Clojure для управления настройками среды из ряда различных источников. Он хорошо работает для приложений, следуя 12 факторным приложением.
В настоящее время Environ поддерживает четыре источника, разрешенные в следующем порядке:
.lein-env в каталоге проекта.boot-env на трассеПервые два источника устанавливаются плагинами Lein-Environ и Boot-Environ соответственно, и не следует отредактировать вручную.
Файл .lein-env заполняется содержанием ключа :env в карте проекта Leiningen. Файл .boot-env заполняется задачей загрузки environ.boot/environ .
Включите следующую зависимость в вашем файле project.clj :
:dependencies [[environ " 1.2.0 " ]]Если вы хотите иметь возможность рисовать настройки с карты проекта Leiningen, вам также понадобится следующий плагин:
:plugins [[lein-environ " 1.2.0 " ]]Если вы используете загрузочный инструмент, вы можете прочитать и записать настройки из сборки сборки. В Build.boot добавьте зависимость:
:dependencies '[[boot-environ " 1.2.0 " ]]Затем требуется задача загрузки среды.
( require '[environ.boot :refer [environ]])Допустим, у вас есть приложение, которое требует подключения к базе данных. Часто вам понадобятся три разные базы данных, одна для разработки, одна для тестирования и одна для производства.
Давайте вытащим детали подключения к базе данных из ключа :database-url на карте environ.core/env .
( require '[environ.core :refer [env]])
( def database-url
( env :database-url )) Значение этого ключа может быть установлено несколькими различными способами. Наиболее распространенным способом при разработке является использование локального profiles.clj . Этот файл содержит карту с профилями, которая будет объединена с профилями, указанными в стандартном project.clj , но может быть оставлена вне контроля версий и зарезервирована для локальных вариантов разработки.
{ :dev { :env { :database-url " jdbc:postgresql://localhost/dev " }}
:test { :env { :database-url " jdbc:postgresql://localhost/test " }}} В этом случае мы добавляем URL -адрес базы данных для среды DEV и тестирования. Это означает, что если вы запустите lein repl , будет использоваться база данных DEV, и если вы запустите lein test , будет использоваться тестовая база данных.
Таким образом, профили, которые вы определяете в profiles.clj , объединены, вместо того, чтобы заменить профили, определенные в project.clj , композитный профиль может быть создан в project.clj :
:profiles { :dev [ :project/dev :profiles/dev ]
:test [ :project/test :profiles/test ]
; ; only edit :profiles/* in profiles.clj
:profiles/dev {}
:profiles/test {}
:project/dev { :source-paths [ " src " " tool-src " ]
:dependencies [[midje " 1.6.3 " ]]
:plugins [[lein-auto " 0.1.3 " ]]}
:project/test {}} А затем используйте :profiles/dev -ключ в ваших profiles.clj .
Ключевые слова с пространством имен project смотрятся на карте проекта. Например:
{ :env { :app-version :project/version }} Это просматривает :version на карте проекта Leiningen. Вы можете просмотреть полную карту проекта с помощью Lein-Pprint.
В случае загрузки у вас есть полная гибкость задач и создавать трубопроводы, что означает, что все следующие являются действительными:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl( environ :env { :database-url " jdbc:postgresql://localhost/dev " })Последняя форма может быть включена в пользовательские трубопроводы и «Опции задач!».
Задача также создает или обновляет файл .boot-env в наборе файлов. Это полезно для задач, которые создают свои собственные стручки, такие как загрузочный тест, которые не увидят изменений в VAR.
Когда вы развернетесь в производственной среде, вы можете использовать переменные среды, например, так:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jarИли используйте свойства системы Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar Обратите внимание, что среда автоматически уменьшает ключи и заменяет символы «_» и «». с "-". database.url DATABASE_URL с переменной среды и базы данных системы :database-url
ВАЖНО - Environ не будет подбирать настройки конфигурации из project.clj при вызове из скомпилированного Uberjar. Таким образом, для любого скомпилированного кода, который вы производите с lein uberjar , вы захотите установить значения конфигурации через среду оболочки и/или свойства системы.
Copyright © 2020 Джеймс Ривз
Распределен по публичной лицензии Eclipse, так же, как Clojure.