2012-08-22 12 views
7

के साथ क्लोजर एप्लिकेशन कैसे बनाएं I इसमें रिंग लाइब्रेरी के साथ क्लोजर प्रोजेक्ट मिला।रिंग सर्वर

(defproject words "1.0.0-SNAPSHOT" 
:description "Websocket handler for sessions" 
:dependencies [[org.clojure/clojure "1.4.0"] 
    [org.clojure/clojure-contrib "1.2.0"] 
    [aleph "0.3.0-alpha1"] 
    [org.clojure/data.json "0.1.2"] 
    [clj-redis "0.0.13-SNAPSHOT"] 
    [compojure "0.6.2"] 
    [clj-http "0.1.3"]] 
:main words.play 
;; Lein ring plugin will provide `lein ring server` functionality 
;; (and some other relative to ring actions) 
:plugins [[lein-ring "0.6.6"]] 
:ring {:handler words.api/engine}) 

विकास के वातावरण में मैं 2 आदेशों के साथ इसे चलाने:: यह project.clj है lein रन सर्वर lein अंगूठी सर्वर और यह काम करता है।

उत्पादन वातावरण मैं निर्भरता को कम करने और इसके साथ स्टैंडअलोन जार में निर्माण करना चाहते हैं के लिए:

lein uberjar 

मैं इसे कैसे का निर्माण और एक जार फ़ाइल से सर्वर के दोनों चला सकता हूँ?

उत्तर

5

:main words.play 

मैं सलाह के लिए के बारे में आप को लागू करने के -main में समारोह words.play कुछ

तरह
(defn -main [& args] 
    (case (first args) 
    "server1" (do (println "Starting server1") (start-server1)) 
    "server2" (do (println "Starting server2") (start-server2)) 
    (println "Enter server name, pls"))) 

नोट

, कि :gen-class नाम स्थान परिभाषा आवश्यक है:

(ns words.play 
    (:gen-class)) 

के लिए कार्यान्वयन start-server1 और start-server2 ठोस फ्रेमवर्क पर निर्भर होना चाहिए: (run-jetty ...) अंगूठी के लिए, (start-http-server ...) एलीफ़ के लिए और इसी तरह (आप सापेक्ष दस्तावेज़ीकरण में अधिक जानकारी प्राप्त कर सकते हैं)।

उपयोग:

lein uberjar 
## to start first server 
java -jar my-project-1.0.0-SNAPSHOT-standalone.jar server1 
## to start second one 
java -jar my-project-1.0.0-SNAPSHOT-standalone.jar server2 
4

सबसे सरल तरीका एक क्लोजर स्रोत फ़ाइल से कक्षा को पूर्व-संकलित करना है जो आपके एप्लिकेशन को शुरू करता है। आपके -main फ़ंक्शन को अंततः (run-jetty #'engine {:port 8080}) जैसे कुछ कॉल करना चाहिए।

यहाँ एक अच्छा ट्यूटोरियल है अगर आप Clojure से परिचित आगे के- समय संकलन ("AOT") नहीं कर रहे हैं: http://kotka.de/blog/2010/02/gen-class_how_it_works_and_how_to_use_it.html

तो यह एक खोल स्क्रिप्ट ऐसा ही कुछ के साथ अपने आवेदन की शुरूआत बनाने की बात है java -cp you-uber.jar words.Main या somesuch।

ध्यान दें कि आपके "ऐप लॉन्चर" वर्ग और अंतिम जार नाम का नाम पूरी तरह से मनमाना है।

0

आप lein ring uberjar इस्तेमाल कर सकते हैं। वह रिंग सर्वर शुरू करेगा। आप :init हुक लीन-रिंग प्रदान करते हुए अन्य सर्वर शुरू कर सकते हैं।

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