2013-02-11 11 views
6

私はここでかなり簡単な問題があると思います。しかし、私はこの画面をあまりにも長く見てきました。だから私はCompojureでステートフルなセッションをやってみようとしています(そして失敗しています)。リファームコードペーストis hereCompojureでlib-noirステートフルセッションを使用する方法

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

お返事ありがとうございます。ええ、私は間違いなくアステリックスの有無にかかわらず試しました。私は友人への呼び出しを取り除こうとしました/認証します。つまり、アプリケーションのdefは次のようになります: '(アプリケーション/ハンドラ/サイト(セッション/ラップノワールセッション* app-routes)')def。 wrap-noir-sessionを呼び出すと、セッションアトムがバインドされていないので、私は正しい指示を探しています。 – Nutritioustim

2

からhttps://groups.google.com/forum/#!topic/compojure/yG6nCXiEinU

は*ハンドラ/サイトの周りに交換してみてくださいとラップノワールセッションを。 ハンドラ/サイトではラップセッションミドルウェアが適用され、 wrap-noir-session *はドキュメントに従って、 ハンドラ/サイトをwrap-noir-sessionの前に適用する必要があります。私はこの質問に来て、それが解決されています忘れ保つように私の答えを下に置く

  • ジェームズ
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)) 
関連する問題