Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Howto use lib-noir stateful-sessions in Compojure

I think I have a fairly straightforward problem here. But I've been looking at this screen too long. So I'm trying (and failing) to get stateful sessions working in Compojure. The refheap code paste is here.

You can see me trying to use lib-noir (line 62) to initialize stateful sessions. Then when the app is running, I try to make a call to session/put! some data in the session (line 43).

Now, this stacktrace says that in session.put!, lib-noir is trying to swap out a session var that hasn't been bound. Now, I thought I did that on line 62. So I'm sure this is a simple fix that another set of eyes will see.

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

like image 433
Nutritioustim Avatar asked Feb 11 '13 04:02

Nutritioustim


1 Answers

Answered by James Reeves at - https://groups.google.com/forum/#!topic/compojure/yG6nCXiEinU

Try swapping around handler/site and wrap-noir-session*. Because handler/site applies the wrap-session middleware, and wrap-noir-session* depends on that according to the documentation, handler/site should be applied before wrap-noir-session.

  • James
like image 91
tutysara Avatar answered Sep 28 '22 03:09

tutysara