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.