2013-02-11 52 views
6

में lib-noir स्टेटफुल-सत्र का उपयोग कैसे करें मुझे लगता है कि मेरे पास यहां काफी सरल समस्या है। लेकिन मैं इस स्क्रीन को बहुत लंबा देख रहा हूं। इसलिए मैं कंपोज़र में काम कर रहे राज्यव्यापी सत्र प्राप्त करने की कोशिश कर रहा हूं (और असफल)। रीफ्रैप कोड पेस्ट is hereकंपोज़र

आप मुझे राज्य सत्रों को शुरू करने के लिए lib-noir (लाइन 62) का उपयोग करने का प्रयास कर सकते हैं। फिर जब ऐप चल रहा है, तो मैं सत्र में कुछ डेटा session/put! पर कॉल करने की कोशिश करता हूं (लाइन 43)।

अब, यह स्टैकट्रैक कहता है कि session.put !, lib-noir एक सत्र var को स्वैप करने की कोशिश कर रहा है जो बाध्य नहीं है। अब, मैंने सोचा कि मैंने 62 लाइन पर ऐसा किया था। तो मुझे यकीन है कि यह एक साधारण फिक्स है कि आंखों का एक और सेट देखेंगे।

java.lang.ClassCastException: clojure.lang.Var$Unbound cannot be cast to clojure.lang.Atom                                                                                 
     at clojure.core$swap_BANG_.invoke(core.clj:2110)                                                                                         
     at noir.session$put_BANG_.invoke(session.clj:18)                                                                                         
     at bkell.http.handler$fn__6159.invoke(handler.clj:156)                                                                                        
     at compojure.core$make_route$fn__3800.invoke(core.clj:93)                                                                                       
     at compojure.core$if_route$fn__3784.invoke(core.clj:39)                                                                                       
     at compojure.core$if_method$fn__3777.invoke(core.clj:24)                                                                                       
     at compojure.core$routing$fn__3806.invoke(core.clj:106)                                                                                       
     at clojure.core$some.invoke(core.clj:2390)                                                                                           
     at compojure.core$routing.doInvoke(core.clj:106)                                                                                         
     at clojure.lang.RestFn.applyTo(RestFn.java:139)                                                                                         
     ... 
     at java.lang.Thread.run(Thread.java:619) 

Thanks

+0

क्या आपको कभी इस समस्या का समाधान मिला? मुझे एक ही मुद्दे का सामना करना पड़ रहा है और एक धागा शुरू किया है, लेकिन किसी भी प्रतिक्रिया नहीं मिली है। – dizzystar

उत्तर

0

I think you want wrap-noir-session, wrap-noir-session* नहीं। wrap-noir-session* पर प्रलेखन (मेरे जोर) "रैप-सत्र के चारों ओर एक स्टेटफुल परत। को उम्मीद है कि रैप-सत्र पहले से ही इस्तेमाल किया गया है।" कहते हैं

आप wrap-noir-session* उपयोग करने के लिए मुझे लगता है कि आप wrap-session का उपयोग करना होगा चाहते हैं स्पष्ट रूप से।

+0

जवाब देने के लिए धन्यवाद। हाँ, मैंने निश्चित रूप से क्षुद्रग्रह के साथ और बिना दोनों की कोशिश की। मैंने दोस्त को फोन/प्रमाणित करने की कोशिश भी की। तो ऐप डीफ़ इस तरह दिखता है: '(डीफ ऐप (हैंडलर/साइट (सत्र/रैप-नोयर-सत्र * ऐप-रूट))। लेकिन मुझे अभी भी वही ** Var $ Unbound ** त्रुटि मिलती है। तो मूल रूप से, कुछ जब मैं रैप-नोयर-सत्र कॉल करता हूं तो सत्र परमाणु बाध्य नहीं हो रहा है। इसलिए मैं सही incantation की तलाश में हूं। – Nutritioustim

2

पर जेम्स रीव्स द्वारा उत्तर दिया - https://groups.google.com/forum/#!topic/compojure/yG6nCXiEinU

हैंडलर/स्थल के चारों ओर की अदला-बदली की कोशिश करो और लपेट-नोयर सत्र *। चूंकि हैंडलर/साइट रैप-सत्र मिडलवेयर लागू करती है, और रैप-नोयर-सत्र * उस पर निर्भर करता है कि प्रलेखन के अनुसार हैंडलर/साइट को लपेटने के पहले लागू किया जाना चाहिए।

  • जेम्स
0

मेरा उत्तर नीचे लाना के रूप में मैं इस सवाल का आते हैं और भूल जाते हैं इसे हल किया गया है।

(ns my-project.handler 
    (:require (compojure [handler :as handler] 
         [route :as route] 
         [core :refer :all]) 
       [noir.util.middleware :as middleware] 
       [noir.session :as session])) 

(defroutes my-routes 
    (GET "/put" req (session/put! :test "yes")) 
    (GET "/get" req (session/get :test)) 
    (route/resources "/") 
    (route/not-found "Not Found")) 

(def app 
    (-> 
    (handler/site my-routes) 
    session/wrap-noir-flash ; only if you need flash-put! and flash-get 
    session/wrap-noir-session)) 

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

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