在我的Clojure Luminus公司/应用程序的Compojure我这routes.clj
:我应该在哪里保存简单的配置设置?
(def page-size 12)
(def images-path "/public/images/.....")
我需要将其移动到某种类型的配置。最好的地方在哪里?我想要一些简单的东西,而不是在Luminus附带的那些已经使用的库上使用任何额外的库。
在我的Clojure Luminus公司/应用程序的Compojure我这routes.clj
:我应该在哪里保存简单的配置设置?
(def page-size 12)
(def images-path "/public/images/.....")
我需要将其移动到某种类型的配置。最好的地方在哪里?我想要一些简单的东西,而不是在Luminus附带的那些已经使用的库上使用任何额外的库。
Luminus使用它的config
库进行配置。 You can put your configuration variables into appropriate config.edn
files (per environment).配置值可作为存储在config.core/env
中的映射来使用。您可以在<app>.core
命名空间看一个例子:
(defn http-port [port]
;;default production port is set in
;;env/prod/resources/config.edn
(parse-port (or port (env :port))))
问自己这个问题:
我会永远想我的应用程序,其中该设置不同的多个部署?
如果这个问题的答案是“是”,那么配置应通过运行你的程序要么通过edn
文件,Environ或其他方式的环境所决定的。
如果不是,那么你正在谈论的东西我会归类为应用常量,这有助于避免magic numbers。在某些情况下,它可以通过将它们放置在特定的命名空间中来提高可读性。
常量命名空间:
(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))
我可以拥有所有的环境之间共享的设置?例如,我希望'page-size'总是等于12,但我不想重复自己。 – Dett
我会写我自己的代码,它会读取一个具有通用配置的文件(例如'common-config.edn')并将其与'config.core/env'合并,然后使用它。 –
我同样惊讶地发现cprop默认不会读取任何常见的配置文件。使用Luminus,将其添加到您的 config.clj:(defstate env:start(load-config :merge [(source/from-resource“common-config.edn”)) –
Kalle