Environ adalah perpustakaan Clojure untuk mengelola pengaturan lingkungan dari sejumlah sumber yang berbeda. Ini bekerja dengan baik untuk aplikasi mengikuti pola aplikasi 12 faktor.
Saat ini, Environ mendukung empat sumber, diselesaikan dalam urutan berikut:
.lein-env
di direktori proyek.boot-env
di classpathDua sumber pertama ditetapkan oleh Lein-environ dan plugin boot-lingkungan masing-masing, dan tidak boleh diedit secara manual.
File .lein-env
dihuni dengan konten :env
di peta proyek leiningen. File .boot-env
diisi oleh tugas boot environ.boot/environ
.
Sertakan ketergantungan berikut dalam file project.clj
Anda:
:dependencies [[environ " 1.2.0 " ]]
Jika Anda ingin dapat menggambar pengaturan dari peta proyek LEININGEN, Anda juga perlu plugin berikut:
:plugins [[lein-environ " 1.2.0 " ]]
Jika Anda menggunakan boot Toolchain, Anda mungkin ingin membaca dan menulis pengaturan dari jaringan pipa. Di build.boot , tambahkan ketergantungan:
:dependencies '[[boot-environ " 1.2.0 " ]]
Kemudian membutuhkan tugas Boot Lingkungan.
( require '[environ.boot :refer [environ]])
Katakanlah Anda memiliki aplikasi yang membutuhkan koneksi basis data. Seringkali Anda membutuhkan tiga basis data yang berbeda, satu untuk pengembangan, satu untuk pengujian, dan satu untuk produksi.
Mari Tarik Detail Koneksi Basis Data dari Kunci :database-url
di peta environ.core/env
.
( require '[environ.core :refer [env]])
( def database-url
( env :database-url ))
Nilai kunci ini dapat diatur dengan beberapa cara berbeda. Cara yang paling umum selama pengembangan adalah dengan menggunakan file profiles.clj
Lokal.clj di direktori proyek Anda. File ini berisi peta dengan profil yang akan digabungkan dengan profil yang ditentukan dalam project.clj
standar.clj, tetapi dapat disimpan di luar kontrol versi dan dicadangkan untuk opsi pengembangan lokal.
{ :dev { :env { :database-url " jdbc:postgresql://localhost/dev " }}
:test { :env { :database-url " jdbc:postgresql://localhost/test " }}}
Dalam hal ini kami menambahkan URL basis data untuk lingkungan DEV dan pengujian. Ini berarti bahwa jika Anda menjalankan lein repl
, database DEV akan digunakan, dan jika Anda menjalankan lein test
, database pengujian akan digunakan.
Sehingga profil yang Anda definisikan dalam profiles.clj
digabungkan, daripada mengganti profil yang didefinisikan dalam project.clj
, profil komposit dapat dibuat dalam 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 {}}
Dan kemudian gunakan :profiles/dev
di profiles.clj
Anda.clj.
Kata kunci dengan namespace project
dicari di peta proyek. Misalnya:
{ :env { :app-version :project/version }}
Ini mencari :version
di peta proyek LEININGEN. Anda dapat melihat peta proyek lengkap dengan menggunakan lein-sprint.
Dalam kasus boot, Anda memiliki fleksibilitas penuh tugas dan membangun pipa, yang berarti bahwa semua yang berikut ini valid:
$ boot environ -e database-url=jdbc:postgresql://localhost/dev repl
( environ :env { :database-url " jdbc:postgresql://localhost/dev " })
Formulir terakhir dapat dimasukkan dalam saluran pipa khusus dan `opsi tugas! '.
Tugas ini juga membuat atau memperbarui file .boot-env
di file. Ini berguna untuk tugas yang membuat pod mereka sendiri seperti boot-test, yang tidak akan melihat perubahan di lingkungan VAR.
Saat Anda menggunakan lingkungan produksi, Anda dapat menggunakan variabel lingkungan, seperti itu:
DATABASE_URL=jdbc:postgresql://localhost/prod java -jar standalone.jar
Atau gunakan Properti Sistem Java:
java -Ddatabase.url=jdbc:postgresql://localhost/prod -jar standalone.jar
Perhatikan bahwa lingkungan secara otomatis menurunkan kunci, dan mengganti karakter "_" dan "." dengan "-". DATABASE_URL
variabel lingkungan dan database.url
properti sistem. Oleh karena itu keduanya dikonversi ke kata kunci yang sama :database-url
.
Penting - Environ tidak akan mengambil pengaturan konfigurasi dari project.clj
ketika dipanggil dari uberjar yang dikompilasi. Jadi untuk kode apa pun yang Anda hasilkan dengan lein uberjar
, Anda akan ingin mengatur nilai konfigurasi Anda melalui lingkungan shell dan/atau properti sistem.
Hak Cipta © 2020 James Reeves
Didistribusikan di bawah lisensi publik Eclipse, sama seperti Clojure.