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"]]}
Другие вопросы по тегам