Как получить имя среды при использовании среды в Clojure?

Как получить имя среды при использовании среды в Clojure? Я имею в виду :dev, :test и т. д. Это нужно для того, чтобы передать его Yeller, чтобы при отображении ошибок он может сказать мне, в какой среде они оказались. Ошибки в подготовке обрабатываются иначе, чем ошибки в производстве.


person pupeno    schedule 22.10.2015    source источник
comment
Какой вариант использования здесь? Если нужно выполнять разные действия в зависимости от среды, возможно, добавление определенных элементов в среду (например, :database-url, :nrepl-port и т. д.) может решить проблему лучше. Вы также можете добавить ключ с именем среды в саму среду.   -  person ez121sl    schedule 22.10.2015


Ответы (2)


Environ предоставляет доступ только к переменным среды, вам нужно установить их самостоятельно. Вы можете использовать lein-environ для установки переменных среды в project.clj в разных профилях. Эти профили будут выбраны leiningen и объединены вместе, к которым вы затем сможете получить доступ из своего кода. Например, у нас есть:

  :profiles {:dev {:resource-paths ["test-resources"]
                   :env            {:environment    "development"
                                    :db-host        "localhost"
                                    :port           5000}}}

Вместо этого в производстве мы предоставляем фактические переменные среды.

person Daniel Compton    schedule 22.10.2015
comment
Я закончил тем, что сделал что-то вроде этого. - person pupeno; 23.10.2015

Точно так же, как вы хотите «Говорить, а не спрашивать» в своем коде, вам нужно просто использовать параметры конфигурации и позволить среде выяснить, какой из них правильный, основанный на среде. В том редком случае, когда вам действительно нужно само имя среды, просто поместите его в карту :env для каждой среды.

person orend    schedule 23.10.2015