Environ est une bibliothèque Clojure pour gérer les paramètres d'environnement à partir d'un certain nombre de sources différentes. Il fonctionne bien pour les applications suivant le modèle d'application 12 facteurs.
Actuellement, Environ prend en charge quatre sources, résolues dans l'ordre suivant:
.lein-env
dans le répertoire du projet.boot-env
sur le chemin de classeLes deux premières sources sont définies par les plugins Lein-Environ et Boot-Environ respectivement et ne doivent pas être modifiées manuellement.
Le fichier .lein-env
est rempli du contenu de la clé :env
dans la carte du projet Leiningen. Le fichier .boot-env
est rempli par la tâche environ.boot/environ
Boot.
Incluez la dépendance suivante dans votre fichier project.clj
:
:dependencies [[environ " 1.2.0 " ]]
Si vous souhaitez pouvoir dessiner des paramètres à partir de la carte du projet Leiningen, vous aurez également besoin du plugin suivant:
:plugins [[lein-environ " 1.2.0 " ]]
Si vous utilisez la chaîne d'outils de démarrage, vous souhaiterez peut-être lire et écrire des paramètres à partir de pipelines de construction. Dans build.boot , ajoutez la dépendance:
:dependencies '[[boot-environ " 1.2.0 " ]]
Nécessitent ensuite la tâche de démarrage Environ.
( require '[environ.boot :refer [environ]])
Supposons que vous ayez une application qui nécessite une connexion de base de données. Souvent, vous aurez besoin de trois bases de données différentes, une pour le développement, une pour les tests et une pour la production.
Permet de tirer les détails de la connexion de la base de données de la clé :database-url
sur la carte environ.core/env
.
( require '[environ.core :refer [env]])
( def database-url
( env :database-url ))
La valeur de cette clé peut être définie de plusieurs manières différentes. Le moyen le plus courant pendant le développement est d'utiliser un fichier local profiles.clj
dans votre répertoire de projet. Ce fichier contient une carte avec des profils qui sera fusionné avec les profils spécifiés dans le project.clj
standard.clj, mais qui peut être gardé hors du contrôle de la version et réservé aux options de développement locales.
{ :dev { :env { :database-url " jdbc:postgresql://localhost/dev " }}
:test { :env { :database-url " jdbc:postgresql://localhost/test " }}}
Dans ce cas, nous ajoutons une URL de la base de données pour les environnements de développement et de test. Cela signifie que si vous exécutez lein repl
, la base de données Dev sera utilisée et si vous exécutez lein test
, la base de données de test sera utilisée.
De sorte que les profils que vous définissez dans profiles.clj
sont fusionnés, plutôt que de remplacer les profils définis dans project.clj
, un profil composite peut être créé dans 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 {}}
Puis utilisez la touche :profiles/dev
dans vos profiles.clj
.
Les mots clés avec un espace de noms de project
sont recherchés dans la carte du projet. Par exemple:
{ :env { :app-version :project/version }}
Cela recherche la clé de :version
la carte du projet Leiningen. Vous pouvez afficher la carte du projet complète en utilisant Lein-Ppprint.
Dans le cas de Boot, vous avez toute la flexibilité des tâches et des pipelines de construction, ce qui signifie que tous les éléments suivants sont valides:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl
( environ :env { :database-url " jdbc:postgresql://localhost/dev " })
Ce dernier formulaire peut être inclus dans les pipelines personnalisés et les «options de tâche!».
La tâche crée également ou met à jour un fichier .boot-env
dans le jeu de fichiers. Ceci est utile pour les tâches qui créent leurs propres pods comme le test de démarrage, qui ne verra pas de changements dans l'environnement VARS.
Lorsque vous déployez dans un environnement de production, vous pouvez utiliser les variables d'environnement, comme ainsi:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jar
Ou utilisez les propriétés du système Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar
Notez que l'environnement abaissent automatiquement les clés et remplace les caractères "_" et "." avec "-". La variable de données de l' DATABASE_URL
et la database.url
de propriétés système.url sont donc toutes deux converties au même mot clé :database-url
.
IMPORTANT - ENVIRNE NE PROCHERA PAS les paramètres de configuration de The project.clj
lorsqu'ils sont appelés à partir d'un Uberjar compilé. Ainsi, pour tout code compilé que vous produisez avec lein uberjar
, vous voudrez définir vos valeurs de configuration via un environnement de shell et / ou des propriétés système.
Copyright © 2020 James Reeves
Distribué sous la licence publique Eclipse, la même que Clojure.