2016-06-07 135 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)) 
相关问题