yogthos/config забирает мой env в CIDER, но не при запуске в lein с профилем
Работая над этим простым демонстрационным проектом, я начал с собственного "управления конфигурацией". По сути, добавьте файл.edn в строку, а затем edn/read-string в карту. Это работало нормально, но потом я добрался до интеграционных тестов, и для этого потребовались разные конфигурационные файлы... поэтому я искал и нашел эту штуку yogthos/config, которая, казалось, была создана именно для этого.
Быстро проверено, кажется, я делаю то, что хочу. Оценивая мой Emacs, подключенный к серверу REPL, я могу оценить интересующее значение конфигурации.
(println "HERE IT IS!!: " (:kafka-broker env))
(def p (producer (:kafka-broker env)))
Когда я компилирую файл, он печатает сообщение со значением config. Тем не менее, когда я запускаю lein with-profile dev uberjar, он умирает прямо здесь, за исключением:
Caused by: java.lang.IllegalArgumentException: requirement failed: Missing required property 'metadata.broker.list'
at scala.Predef$.require(Predef.scala:233)
, и мой println, который был добавлен для этой цели, подтверждает подозрение:
HERE IT IS!!: nil
Но... но... Я дал его с профилем Dev..?
Вывод lein with-profile dev pprint выглядит правильно, но я, вероятно, не знаю, что искать:
...
:resource-paths
("/Users/akarpov/repos/coras/config/dev"
"/Users/akarpov/repos/coras/resources"),
...
наконец, это из моего project.clj:
...
:profiles {:prod {:resource-paths ["config/prod"]}
:dev {:resource-paths ["config/dev"]}
:uberjar {:aot :all}}
...
1 ответ
Хорошо, я думаю, что нашел ответ (и это было связано с моим отсутствием знаний о том, как на самом деле работает project.clj)
в основном, как было отмечено в комментарии выше, запуск задачи uberjar действительно неявно запускает ее во встроенном профиле некоторого вида.
так что я подумал хорошо, давайте запустим задачу 'repl' с профилем разработчика. Затем я получил ошибку об отсутствующем nrepl.server; который неявно является частью некоторого встроенного профиля по умолчанию (lein repl работает нормально). После добавления этого в качестве явной вещи, это похоже на работу:
:profiles {:prod {:resource-paths ["config/prod"]
:plugins [[cider/cider-nrepl "0.16.0"]]}
:dev {:resource-paths ["config/dev"]
:plugins [[cider/cider-nrepl "0.16.0"]]}
:uberjar {:aot :all}}
после преодоления этого следующей проблемой было убедиться, что задача yberjar не переопределяет мой профиль prod, поэтому нужно настаивать на сохранении этого значения:
:profiles {:prod {:resource-paths ^:replace ["config/prod"]
:plugins [[cider/cider-nrepl "0.16.0"]]}