O Environ é uma biblioteca de clojure para gerenciar configurações de ambiente de várias fontes diferentes. Funciona bem para aplicações seguindo o padrão de aplicativo de 12 fatores.
Atualmente, o Environ suporta quatro fontes, resolvido na seguinte ordem:
.lein-env
no diretório do projeto.boot-env
no caminho de classeAs duas primeiras fontes são definidas pelos plug-ins Lein-areviron e boot-areron, respectivamente, e não devem ser editados manualmente.
O arquivo .lein-env
é preenchido com o conteúdo da tecla :env
no mapa do projeto Leiningen. O arquivo .boot-env
é preenchido pela tarefa environ.boot/environ
Environ.
Inclua a seguinte dependência em seu arquivo project.clj
:
:dependencies [[environ " 1.2.0 " ]]
Se você deseja desenhar configurações do mapa do projeto Leiningen, também precisará do seguinte plug -in:
:plugins [[lein-environ " 1.2.0 " ]]
Se você estiver usando a cadeia de ferramentas de inicialização, convém ler e gravar configurações dos pipelines Build. Em Build.Boot , adicione a dependência:
:dependencies '[[boot-environ " 1.2.0 " ]]
Em seguida, exija a tarefa de inicialização do ambiente.
( require '[environ.boot :refer [environ]])
Digamos que você tenha um aplicativo que requer uma conexão de banco de dados. Muitas vezes, você precisará de três bancos de dados diferentes, um para desenvolvimento, um para testes e outro para produção.
Vamos puxar os detalhes da conexão do banco de dados da chave :database-url
no Mapa environ.core/env
.
( require '[environ.core :refer [env]])
( def database-url
( env :database-url ))
O valor dessa chave pode ser definido de várias maneiras diferentes. A maneira mais comum durante o desenvolvimento é usar um arquivo de profiles.clj
locais.clj no diretório do seu projeto. Este arquivo contém um mapa com perfis que serão mesclados com os perfis especificados no project.clj
padrão.clj, mas podem ser mantidos fora do controle de versão e reservados para opções de desenvolvimento local.
{ :dev { :env { :database-url " jdbc:postgresql://localhost/dev " }}
:test { :env { :database-url " jdbc:postgresql://localhost/test " }}}
Nesse caso, adicionamos um URL do banco de dados para os ambientes de desenvolvimento e teste. Isso significa que, se você executar lein repl
, o banco de dados dev será usado e, se você executar lein test
, o banco de dados de teste será usado.
Para que os perfis que você defina em profiles.clj
são mesclados, em vez de substituir os perfis definidos no project.clj
, um perfil composto pode ser criado no 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 {}}
E depois use o :profiles/dev
em seus profiles.clj
.
As palavras -chave com um espaço para nome de project
são procuradas no mapa do projeto. Por exemplo:
{ :env { :app-version :project/version }}
Isso procura a chave :version
no mapa do projeto Leiningen. Você pode visualizar o mapa completo do projeto usando o Lein-Print.
No caso de inicialização, você tem toda a flexibilidade de tarefas e construir pipelines, o que significa que todos os seguintes são válidos:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl
( environ :env { :database-url " jdbc:postgresql://localhost/dev " })
O último formulário pode ser incluído em pipelines personalizados e `opções de tarefas! '.
A tarefa também cria ou atualiza um arquivo .boot-env
no conjunto de arquivos. Isso é útil para tarefas que criam seus próprios pods como o teste de inicialização, que não verão alterações no Environ VARs.
Quando você implanta para um ambiente de produção, você pode usar variáveis de ambiente, assim:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jar
Ou use propriedades do sistema Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar
Observe que o Environ abaixa automaticamente as teclas e substitui os caracteres "_" e "." com "-". O DATABASE_URL
variável de ambiente e o database.url
do System Property.url são, portanto, ambos convertidos para a mesma palavra-chave :database-url
.
IMPORTANTE - O Environ não captará as configurações do project.clj
quando chamadas de um Uberjar compilado. Portanto, para qualquer código compilado que você produz com lein uberjar
, você deseja definir seus valores de configuração por meio do ambiente do shell e/ou propriedades do sistema.
Copyright © 2020 James Reeves
Distribuído sob a licença pública do Eclipse, o mesmo que Clojure.