Clojure 我应该在哪里保存简单的配置设置?

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

在我的clojure Luminus/Compojure应用程序中,
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”)