zca*_*ate 14 clojure leiningen
我在project.clj中定义了两个配置文件,一个在本地,一个用于在travis上测试:
:profiles {:dev {:dependencies [[midje "1.6.0"]
[mysql/mysql-connector-java "5.1.25"]]
:plugins [[lein-midje "3.1.3"]]
:user "root" :pass "root"}
:travis {:user "travis" :pass ""}}
Run Code Online (Sandbox Code Playgroud)
我希望能够访问:user和:传递我的项目中的值.如何才能做到这一点?
更新:
我也希望能够使用lein with-profile
命令......所以我的测试会有:
lein with-profile dev test
Run Code Online (Sandbox Code Playgroud)
- >会使用"root","root"凭据
lein with-profile dev,travis test
Run Code Online (Sandbox Code Playgroud)
- >会使用"travis",""凭据
And*_*rew 15
如果您不需要project.clj
为其他任何内容定义的值(IE,您可以自由选择表示),请考虑Environ.
然后,您可以在project.clj中定义以下内容
:profiles {:dev {:env {:user "root" :pass "root"}}}
Run Code Online (Sandbox Code Playgroud)
并阅读值:
(use 'environ.core)
(def creds
{:user (env :user)
:pass (env :pass)})
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,您还可以使用环境变量和系统属性指定值.
Leiningen的构建文件是Clojure代码,因此您只需阅读:
(->> "project.clj" slurp read-string (drop 3) (partition 2) (map vec) (into {})
:profiles :dev)
; => {:dependencies [[midje "1.5.1"] [ring-server "0.2.8"]], :plugins [[lein-midje "3.1.0"]]}
Run Code Online (Sandbox Code Playgroud)
如果您需要更重的功能(例如访问最终的项目图),那么像configleaf这样的东西可能更适合.
管理它的另一种方法(我经常使用)是为配置文件特定数据提供单独的配置文件:
example/profiles/travis/example/config.clj
:
(ns example.config)
(def user "travis")
(def pass "")
Run Code Online (Sandbox Code Playgroud)
example/dev-resources/example/config.clj
:
(ns example.config)
(def user "root")
(def pass "root")
Run Code Online (Sandbox Code Playgroud)
example/src/example/core.clj
:
(ns example.core
(:require [example.config :as config]))
(println config/user)
Run Code Online (Sandbox Code Playgroud)
您需要将配置文件特定的资源路径添加到您的project.clj
:
:profiles {:travis {:resource-paths ["profiles/travis/"]}}
Run Code Online (Sandbox Code Playgroud)