Environ es una biblioteca Clojure para administrar la configuración del entorno de varias fuentes diferentes. Funciona bien para aplicaciones que siguen el patrón de la aplicación 12 factor.
Actualmente, Environ admite cuatro fuentes, resueltas en el siguiente pedido:
.lein-env
en el directorio del proyecto.boot-env
en el classpathLas dos primeras fuentes son establecidas por los complementos lein-envontrón y de arranque-envidón respectivamente, y no deben editarse manualmente.
El archivo .lein-env
está poblado con el contenido de la tecla :env
en el mapa del proyecto Leiningen. El archivo .boot-env
está poblado por la tarea de arranque environ.boot/environ
.
Incluya la siguiente dependencia en su archivo project.clj
:
:dependencies [[environ " 1.2.0 " ]]
Si desea poder extraer la configuración del mapa del proyecto Leiningen, también necesitará el siguiente complemento:
:plugins [[lein-environ " 1.2.0 " ]]
Si está utilizando la cadena de herramientas de arranque, es posible que desee leer y escribir la configuración de Build Pipelines. En build.boot , agregue la dependencia:
:dependencies '[[boot-environ " 1.2.0 " ]]
Luego requiere la tarea de arranque de Environ.
( require '[environ.boot :refer [environ]])
Supongamos que tiene una aplicación que requiere una conexión de base de datos. A menudo necesitará tres bases de datos diferentes, una para el desarrollo, una para pruebas y otra para la producción.
Permitamos los detalles de la conexión de la base de datos de la clave :database-url
en el mapa environ.core/env
.
( require '[environ.core :refer [env]])
( def database-url
( env :database-url ))
El valor de esta clave se puede establecer de varias maneras diferentes. La forma más común durante el desarrollo es utilizar un archivo local profiles.clj
en el directorio de su proyecto. Este archivo contiene un mapa con perfiles que se fusionarán con los perfiles especificados en el project.clj
estándar.clj, pero se puede mantener fuera del control de versiones y reservarse para las opciones de desarrollo locales.
{ :dev { :env { :database-url " jdbc:postgresql://localhost/dev " }}
:test { :env { :database-url " jdbc:postgresql://localhost/test " }}}
En este caso, agregamos una URL de la base de datos para los entornos de desarrollo y prueba. Esto significa que si ejecuta lein repl
, se utilizará la base de datos de Dev, y si ejecuta lein test
, se utilizará la base de datos de prueba.
De modo que los perfiles que define en profiles.clj
se fusionan, en lugar de reemplazar los perfiles definidos en project.clj
, se puede crear un perfil compuesto en 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 {}}
Y luego use :profiles/dev
Key en sus profiles.clj
.
Las palabras clave con un espacio de nombres project
se buscan en el mapa del proyecto. Por ejemplo:
{ :env { :app-version :project/version }}
Esto busca la tecla :version
en el mapa del proyecto Leiningen. Puede ver el mapa completo del proyecto usando Lein-Pprint.
En el caso del arranque, tiene la flexibilidad completa de las tareas y la construcción de tuberías, lo que significa que todo lo siguiente es válido:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl
( environ :env { :database-url " jdbc:postgresql://localhost/dev " })
El último formulario se puede incluir en tuberías personalizadas y `` óptimas de tareas! '.
La tarea también crea o actualiza un archivo .boot-env
en el conjunto de archivos. Esto es útil para las tareas que crean sus propias vainas como la prueba de arranque, que no verán cambios en los Vars Environ.
Cuando se despliega en un entorno de producción, puede hacer uso de variables de entorno, como así:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jar
O usar propiedades del sistema Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar
Tenga en cuenta que el medio ambiente reduce automáticamente las claves y reemplaza los caracteres "_" y ".". con "-". La variable de entorno DATABASE_URL
y la propiedad de la propiedad del database.url
por lo tanto, se convierten a la misma palabra clave :database-url
.
IMPORTANTE - Environ no recogerá la configuración de la configuración del project.clj
cuando se le llame desde un Uberjar compilado. Por lo tanto, para cualquier código compilado que produzca con lein uberjar
, querrá establecer sus valores de configuración a través del entorno de shell y/o las propiedades del sistema.
Copyright © 2020 James Reeves
Distribuido bajo la licencia pública de Eclipse, lo mismo que Clojure.