【问题标题】:Compojure Lib-Noir session/put! unbound var errorCompojure Lib-Noir 会话/放置!未绑定的 var 错误
【发布时间】:2013-04-23 05:30:50
【问题描述】:

我正在将几个月前制作的旧 Web 应用程序从 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 user) 并且看起来 :uname 不起作用。当我使用与以前相同的工具时,我很困惑为什么它以前会起作用而不是现在起作用。这是对我大约 6 个月前建立的网站的重写。我只是把它从 Noir 移到 Compojure。据我所知,lib-noir 会话与 Noir 中的会话基本相同。

另一个编辑

我把代码放在了 github 上。这不是完成的项目,但希望有人能破译这里发生了什么:https://github.com/dt1/SoloResume

【问题讨论】:

    标签: clojure


    【解决方案1】:

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

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

    仅将其用于测试/模拟以查看会话映射中发生的情况,而不是生产代码。

    【讨论】:

    • CompilerException java.lang.RuntimeException: Unable to resolve var: noir.session/*session* in this context, compile:(NO_SOURCE_PATH:1:1)
    • 不是错字:noir-session
    • 我曾短暂考虑将其放在原始程序中的某个地方,但后来我意识到 somekey 不会是可变的,因此似乎没有任何方法可以让多人登录,这对吗?另外,我将如何从其他命名空间调用它?
    • @dizzystar 原子是对不可变数据的可变引用。它包含的映射是不可变的,但您可以将其替换为另一个不可变映射。这正是put!swap! 所做的。
    • 不要在实际代码中使用我的示例。仅将它用于测试必须更改会话映射的函数,以查看它们是否按预期运行。
    【解决方案2】:

    一个相当老的问题,但在这里回答,因为这是我遇到同样问题时的第一个谷歌结果。我使用的是 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2013-11-02
      • 2014-11-25
      • 2014-01-11
      • 1970-01-01
      • 2012-03-07
      • 2015-05-20
      相关资源
      最近更新 更多