Compojure Lib-Noir会议/推出!未绑定的var错误

时间:2013-04-29 13:55:55

标签: clojure

我正在转换我几个月前从Noir到Compojure的旧网络应用程序,我正在使用Lib-Noir附加组件。看来会话/放!要么以某种方式改变我不理解,要么因为某种原因而烦恼。

在这里,我可以看到4Clojure似乎正在使用它而没有任何问题:See Line 51。我还发现this thread涵盖了同样的问题,但似乎没有令人满意的答案。

这应该有效(Noir)

user=> (require '[noir.session :as sesh])
nil
user=> (sesh/put! :user "me")
ClassCastException clojure.lang.Var$Unbound cannot be cast to clojure.lang.Atom  
clojure.core/swap! (core.clj:2162)

以上是我在网页上看到的相同错误。基本上我被卡住了。

编辑以添加

出现我在命令行部分创建了一些混乱:( put!)在程序中也不起作用。关于它的描述并不多,除了它是(shesh / put!:uname用户)并且看起来:uname不起作用。我很困惑为什么它之前会有效,而不是现在我使用的工具和以前一样。这是我大约6个月前建立的网站的重写。我只是将它从Noir转移到Compojure。据我所知,lib-noir会议与Noir的会议基本相同。

另一个编辑

我把代码放在github上。这不是已完成的项目,但希望有人可以解读这里发生的事情:https://github.com/dt1/SoloResume

2 个答案:

答案 0 :(得分:1)

如果从REPL运行它,则Noir中没有注册浏览器会话。您可以使用绑定来模拟这个:

(binding [sesh/*noir-session* (atom {:somekey "somevalue"})]
  (sesh/put! :user "borkdude"))

仅用于测试/模拟,以查看会话地图中的内容,而不是生产代码中的内容。

答案 1 :(得分:0)

一个相当古老的问题,但在这里回答,因为这是我遇到同样问题时的第一个Google结果。我使用的是compojure:1.1.6,ring:1.2.1和lib-noir:0.7.6

在定义应用时,您需要使用noir.session / wrap-noir-session - 例如:

(def app
  (-> (handler/site (routes app-routes ))
      session/wrap-noir-session
      wrap-base-url))

参考文献: https://groups.google.com/d/msg/clojure/XXgSGhF912I/luhN9wmMoi8J