많은 noir 애플 리케이션에서 나는 아래 선언을 보았다. aot를 건너 뛰는 목적은 무엇입니까? 언제 그것을 사용하고 그것을 사용하지 않을까요? 장점/단점?AOT를 건너 뛰는 이유는 무엇입니까?
:main ^{:skip-aot true} sample-app.server
많은 noir 애플 리케이션에서 나는 아래 선언을 보았다. aot를 건너 뛰는 목적은 무엇입니까? 언제 그것을 사용하고 그것을 사용하지 않을까요? 장점/단점?AOT를 건너 뛰는 이유는 무엇입니까?
:main ^{:skip-aot true} sample-app.server
이 노아에만있는 것이 아니라 같은 Heroku가 같은 PaaS를 제공하는 코드를 배포 할 때 주어진 네임 스페이스 AOT를 생략 할 수 있습니다 하나 개의 시나리오입니다.
(db/connect! (System/getenv "DB_URL"))
(defn start [port]
(run-jetty app {:port port :join? false :max-threads 100}))
원칙적으로이 코드는 무해한 보인다는 AOT 컴파일되는 관계없이 로컬로 작동합니다
는 Heroku가 그렇게 당신의 server.clj에서이 조각을 고려 기본적으로 코드의 AOT 컴파일을 수행한다.
그러나 heroku에서 컴파일하는 동안 환경 변수 "DB_URL"을 사용할 수 없으므로 위의 connect!
문은 nil
에 연결하려고 시도하고 예외를 throw합니다.
이 네임 스페이스의 AOT 컴파일을 건너 뛰는 것이이 문제를 방지하는 한 가지 방법입니다.
또 다른, 그리고 순간에 내 선호하는 접근 방식이 약간 변경하는 것입니다 :
(defn bootstrap! []
(db/connect! (System/getenv "DB_URL")))
(defn start [port]
(bootstrap!)
(run-jetty app {:port port :join? false :max-threads 100}))
는 당신의 의도는 당신이 컴파일하는 동안 데이터베이스 연결을 시도 피할 것을 조금 명확입니다 그런 식으로.
나는 이것을 어려운 방법으로 알았고 this blog post에 문서화했다.
희망이 유용합니다.
http://clojure.org/compilation 위 질문에 대한 답입니다. – murtaza52