Clojure 我应该在哪里保存简单的配置设置?
在我的clojure Luminus/Compojure应用程序中,Clojure 我应该在哪里保存简单的配置设置?,clojure,config,compojure,luminus,Clojure,Config,Compojure,Luminus,在我的clojure Luminus/Compojure应用程序中,routes.clj: (def page-size 12) (def images-path "/public/images/.....") 我需要将它们移动到某种配置中。最好的地方在哪里?我想要一些简单的东西,不要在我已经使用的Luminus附带的库之上使用任何额外的库。Luminus使用它的库进行配置。配置值作为映射存储在Config.core/env中。您可以在.core命名空间中看到一个示例: (defn
routes.clj
:
(def page-size 12)
(def images-path "/public/images/.....")
我需要将它们移动到某种配置中。最好的地方在哪里?我想要一些简单的东西,不要在我已经使用的Luminus附带的库之上使用任何额外的库。Luminus使用它的库进行配置。配置值作为映射存储在Config.core/env
中。您可以在.core
命名空间中看到一个示例:
(defn http-port [port]
;;default production port is set in
;;env/prod/resources/config.edn
(parse-port (or port (env :port))))
(ns my.app.constants)
(def page-size 12)
(def images-path "/public/images/.....")
问问自己这个问题: 如果此设置不同,我是否希望应用程序的多个部署 如果该问题的答案为“是”,则配置应由运行应用程序的环境通过
edn
文件或其他方式决定
如果不是。。。然后,您正在谈论一些我将归类为应用程序常量的内容,这有助于避免。在某些情况下,它可以通过将它们放在特定的名称空间中来提高可读性
常量命名空间:
(defn http-port [port]
;;default production port is set in
;;env/prod/resources/config.edn
(parse-port (or port (env :port))))
(ns my.app.constants)
(def page-size 12)
(def images-path "/public/images/.....")
应用程序:
(ns my.app.core
(:require [my.app.constants :as const)
;; now access the application constant like this
;; const/page-size
(defn image-url [image-name]
(str const/images-path "/" image-name))
我可以在所有环境之间共享一个设置吗?例如,我希望
页面大小
在所有页面中始终等于12,但我不想重复我自己。我会编写自己的代码,用公共配置读取文件(例如公共配置.edn
)并将其与config.core/env
one合并使用。我同样惊讶地发现,cprop默认情况下不读取任何公共配置文件。使用Luminus,将其添加到config.clj:(defstate env:start(load config:merge[(source/from resource“common config.edn”)