6

ここにはかなり単純な問題があると思います。しかし、私はこの画面をあまりにも長く見ていました。そのため、Compojure でステートフル セッションを動作させようとしています (そして失敗しています)。refheap コードの貼り付けは hereです。

lib-noir (62 行目) を使用してステートフル セッションを初期化しようとしているのがわかります。次に、アプリが実行されているときに、 session/put!の呼び出しを試みます。セッション内のいくつかのデータ (43 行目)。

現在、このスタックトレースは、session.put! で、lib-noir がバインドされていないセッション変数を交換しようとしていることを示しています。今、私は 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)

ありがとう

4

3 に答える 3

2

James Reeves の回答 - https://groups.google.com/forum/#!topic/compojure/yG6nCXiEinU

ハンドラ/サイトと wrap-noir-session* を交換してみてください。handler/site は wrap-session ミドルウェアを適用し、wrap-noir-session* はドキュメントによるとそれに依存するため、handler/site は wrap-noir-session の前に適用する必要があります。

  • ジェームズ
于 2013-11-09T06:04:24.780 に答える
0

私はあなたが欲しいと思いますwrap-noir-session、ではありませんwrap-noir-session*。のドキュメントにwrap-noir-session*は、(私の強調)「ラップセッションの周りのステートフルレイヤー。ラップセッションがすでに使用されていることが期待されます。」と書かれています。

使用したい場合は明示的wrap-noir-session*に使用する必要があると思います。wrap-session

于 2013-02-12T03:14:21.780 に答える