在我的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