2012-06-24 18 views
25

कई नोयर ऐप्स में मैंने नीचे की घोषणा देखी है। आॉट छोड़ने का उद्देश्य क्या है? इसका उपयोग कब करें और इसका उपयोग कब नहीं करें? कोई फायदे/नुकसान?एओटी छोड़ने का कारण?

:main ^{:skip-aot true} sample-app.server 
+0

http://clojure.org/compilation यह उपरोक्त प्रश्न का उत्तर देता है। – murtaza52

उत्तर

27

इस Noir के लिए विशिष्ट नहीं है, लेकिन एक परिदृश्य आप किसी दिए गए नाम स्थान के लिए AOT छोड़ना चाहते हो सकता है जब इस तरह के Heroku के रूप में एक PaaS प्रदाता के लिए अपने कोड की तैनाती है।

Heroku डिफ़ॉल्ट रूप से अपने कोड की AOT संकलन करता है तो अपने server.clj में इस स्निपेट पर विचार करें:

(db/connect! (System/getenv "DB_URL")) 

(defn start [port] 
    (run-jetty app {:port port :join? false :max-threads 100})) 

सिद्धांत रूप में इस कोड को हानिरहित लगता है और यह AOT संकलित किया जा रहा है की परवाह किए बिना स्थानीय स्तर पर काम करेंगे।

हालांकि उसकेोकू पर संकलन के दौरान, पर्यावरण परिवर्तनीय "डीबी_URL" अभी तक उपलब्ध नहीं है, इसलिए ऊपर connect! कथन nil से कनेक्ट करने का प्रयास करेगा और अपवाद फेंक देगा।

इस नामस्थान का एओटी संकलन छोड़ना इसे रोकने का एक तरीका है।

एक और है, और इस समय मेरे पसंदीदा दृष्टिकोण यह करने के लिए थोड़ा इसे बदलने के लिए होगा:

(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 में इसे दस्तावेज किया।

आशा है कि यह उपयोगी है।

संबंधित मुद्दे