Dett
Dett

Reputation: 95

Where should I save simple configuration settings?

In my clojure Luminus/Compojure app I have this in routes.clj:

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

I need to move them to a config of some sort. Where is the best place? I'd like something simple and not to use any additional library on top on the ones that I'm already using which come with Luminus.

Upvotes: 2

Views: 407

Answers (2)

Jacob
Jacob

Reputation: 1004

Ask yourself this question:

Would I ever want multiple deployments of my application where this setting differs?

If the answer to that question is "yes" then the configuration should be dictated by the environment running you application either by an edn file, Environ or other means.

If not... then you are talking about something I would categorize as an application constant, which helps avoiding magic numbers. In some situations it can improve readability by placing these in specific namespaces like so.

Constants namespace:

(ns my.app.constants)

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

Application:

(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))

Upvotes: 2

Piotrek Bzdyl
Piotrek Bzdyl

Reputation: 13185

Luminus uses it's config library for configuration. You can put your configuration variables into appropriate config.edn files (per environment). Config values are available as a map stored in config.core/env. You can see an example in your <app>.core namespace:

(defn http-port [port]
  ;;default production port is set in
  ;;env/prod/resources/config.edn
  (parse-port (or port (env :port))))

Upvotes: 4

Related Questions