Ответ 1
Это не относится к noir, но один сценарий, который вы, возможно, захотите пропустить AOT для данного пространства имен, - это развертывание вашего кода для провайдера PaaS, такого как heroku.
Heroku выполняет компиляцию AOT вашего кода по умолчанию, поэтому рассмотрите этот фрагмент на вашем сервере server.clj:
(db/connect! (System/getenv "DB_URL"))
(defn start [port]
(run-jetty app {:port port :join? false :max-threads 100}))
В принципе этот код кажется безобидным и будет работать локально независимо от того, что он скомпилирован AOT.
Однако во время компиляции на heroku переменная окружения "DB_URL" пока недоступна, поэтому приведенный выше оператор connect!
попытается подключиться к nil
и выбросить исключение.
Пропуск AOT-компиляции этого пространства имен является одним из способов предотвращения этого.
Другой, и моим предпочтительным подходом в данный момент было бы небольшое его изменение:
(defn bootstrap! []
(db/connect! (System/getenv "DB_URL")))
(defn start [port]
(bootstrap!)
(run-jetty app {:port port :join? false :max-threads 100}))
Таким образом, немного ясно, каково ваше намерение, и вы избегаете попытки подключения к базе данных во время компиляции.
Я изучил этот трудный путь и зафиксировал его в этом сообщении в блоге.
Надеюсь, это полезно.