2016-06-07 327 views
1

在我的Clojure Luminus公司/應用程序的Compojure我這routes.clj我應該在哪裏保存簡單的配置設置?

(def page-size 12) 
    (def images-path "/public/images/.....") 

我需要將其移動到某種類型的配置。最好的地方在哪裏?我想要一些簡單的東西,而不是在Luminus附帶的那些已經使用的庫上使用任何額外的庫。

回答

4

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)))) 
+0

我可以擁有所有的環境之間共享的設置?例如,我希望'page-size'總是等於12,但我不想重複自己。 – Dett

+0

我會寫我自己的代碼,它會讀取一個具有通用配置的文件(例如'common-config.edn')並將其與'config.core/env'合併,然後使用它。 –

+0

我同樣驚訝地發現cprop默認不會讀取任何常見的配置文件。使用Luminus,將其添加到您的 config.clj:(defstate env:start(load-config :merge [(source/from-resource「common-config.edn」)) – Kalle

1

問自己這個問題:

我會永遠想我的應用程序,其中該設置不同的多個部署?

如果這個問題的答案是「是」,那麼配置應通過運行你的程序要麼通過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)) 
相關問題