我正在转换我几个月前从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
答案 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