2012-02-01 12 views
5

के लिए प्रारंभिक हुक क्लाउडफाउंड्री में एक WAR फ़ाइल के रूप में चलाने के लिए मैं क्लोजर नोयर वेब एप्लिकेशन बना रहा हूं।क्लोजर नोयर वायर/सर्वलेट (क्लाउडफाउंड्री)

मेरी project.clj में मेरे पास है:

:ring {:handler appname.server/handler} 

server.clj में मैं एक हैंडलर नोयर का उपयोग कर बनाने के लिए:

(def handler (noir.server/gen-handler {:ns 'appname})) 

मैं एक lein अंगूठी प्लगइन का उपयोग कर युद्ध फ़ाइल का निर्माण:

lein ring uberwar 

फिर क्लाउडफाउंड्री को दबाकर:

vmc push appname 

अनुरोध हैंडलर ठीक काम करता है और मैं एप्लिकेशन के यूआरएल को ठीक से ब्राउज़ कर सकता हूं।

तो सवाल यह है कि आवेदन शुरू होने पर प्रारंभ करने का सही तरीका क्या है?

मैं server.clj में निम्न कर सकते हैं:

(when (System/getenv "VCAP_APPLICATION") 
    (init-func)) 

लेकिन वहाँ उस के साथ कुछ समस्याएं हैं। सबसे पहले, ऐसा लगता है कि गलत समय पर प्रारंभ करना (जब ऐप शुरू होने के बजाय कोड पढ़ा/eval'd किया जाता है)। दूसरा, रक्षक क्लाउडफाउंड्री के लिए विशिष्ट है और मुझे यकीन है कि ऐसा करने के लिए एक उचित सामान्य युद्ध तरीका है।

मुझे लगता है कि यह संदर्भ का उद्देश्य है ServletContextListener पर प्रारंभिक विधि लेकिन मैं इसे नोयर/अंगूठी के साथ कैसे लगा सकता हूं?

उत्तर

6

ring source for WAR handling

को देख project.clj से यह पता चल: तो जैसे init कीवर्ड:: अंगूठी नक्शा ले जाता है एक

:ring {:init appname.server/my-init 
     :handler appname.server/handler} 

मेरी-init समारोह आवेदन स्टार्टअप पर बुलाया जाएगा।

कैविट: यह स्पष्ट रूप से आरंभिक स्टार्टअप के लिए एप्लिकेशन द्वारा आवश्यक स्मृति की मात्रा को गुब्बारे देता है। 128 एम प्रारंभिक के बिना पर्याप्त था। प्रारंभिक कोड के साथ, ऐप स्टार्टअप असफल रहा, इसलिए मुझे स्मृति को 256 एम पर टक्कर देना पड़ा। मुझे संदेह है कि इनिट कोड के साथ क्लोजर कोड संकलित/निष्पादित होने से पहले JVM में कचरा संग्रहण करने का समय नहीं है।

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

  • कोई संबंधित समस्या नहीं^_^