YouSee/clojure-config – GitHub
自分でjson書いて、パースしてってやれば、簡単な物はできるので、作っても良かったのですが、だるかったので、既にライブラリがあるだろうから、探してみたところやっぱりありました。
名前がかなり分かりづらいですけど、clojure-configというライブラリです。
これは、環境識別の設定を環境変数「ENV」に設定されている環境識別子、ホスト名またはユーザ名に基づいて設定することが出来ます。
まずは、project.cljに下記を追加します。
[clojure-config "1.0.5"] |
使い方はこんな感じになります。
(ns hoge.environment_test (:use clojure-config.core)) (set-properties [ ;; =============================== ;; GLOBAL Settings ;; =============================== {:name "global" :properties {:port 8080 :db-name "example_development" :db-host "localhost"}} ;; =============================== ;; DEVELOPMENT Settings ;; =============================== {:name "development" :type "user" :value "ubuntu"} ;; =============================== ;; TEST Settings ;; =============================== {:name "test" :type "user" :value "ubuntu" :properties {:db-name "example_test"}} ;; =============================== ;; PRODUCTION Settings ;; =============================== {:name "production" :type "user" :value "ubuntu" :properties {:db-name "example_production"}} ;; =============================== ;; LOCAL Settings ;; =============================== {:name "local" :type "user" :value "tatsuya" :parent "dev"}]) (defn -main [] ;; プロパティの値をキーを基に取得 (println (property :db-name)) ;; プロパティのマップを取得 (println (properties)) |
で、これを実行する場合、下記のようにENVに各環境の識別子を指定して実行します。
$ ENV=development lein run -m hoge.environment_test $ ENV=test lein run -m hoge.environment_test $ ENV=production lein run -m hoge.environment_test $ ENV=local lein run -m hoge.environment_test |
この、clojure-configですが、:typeに”host”または”user”を指定していますが、hostの場合は実行環境のホスト名が:valueの値と一致しないといけません。同じように:typeに”user”を指定した場合には、:valueの値が実行ユーザ名と一致しないといけません。