Clojure Enlive模板自动重新加载/检测基座服务中的更改

Clojure Enlive模板自动重新加载/检测基座服务中的更改,clojure,enlive,pedestal,Clojure,Enlive,Pedestal,我使用的是autoreload服务器示例,它非常适合在使用ns tracker对.clj文件进行更改时重新加载名称空间 但是,它没有在resources/public目录中获取对enlive模板的更改。我已将模板路径添加到defn watch中的向量: `([] (watch ["src" "resources" "resources/public" "public"]))` 在使用enlive deftemplate的名称空间中,这一点也很重要: (net.cgrand.reload/au

我使用的是autoreload服务器示例,它非常适合在使用ns tracker对.clj文件进行更改时重新加载名称空间

但是,它没有在resources/public目录中获取对enlive模板的更改。我已将模板路径添加到defn watch中的向量:

`([] (watch ["src" "resources" "resources/public" "public"]))`
在使用enlive deftemplate的名称空间中,这一点也很重要:

(net.cgrand.reload/auto-reload*ns*)

然而,这不起作用。我的假设是ns tracker仅适用于clj文件,并且我使用的enlive重新加载功能不正确

有人在使用enlive并且已经解决了这个问题,或者有什么想法可以尝试吗?

我希望在2013年12月初的版本1.1.5中解决这个问题。但是,在我的测试中,我无法确认这是一个修复。我可能做错了什么


注:我想你举的例子可以追溯到。我可能错了,但我认为您最好遵循当前的文档,而不是示例文件


公司的主要建议(可能会发生变化)包括:

  • 用于确定要重新加载的名称空间

  • :资源路径[“config”,“resources”]
    添加到
    project.clj
    ,以便Enlive可以找到您的静态HTML资源

  • 这些步骤不足以引起对资源的更改以触发重新加载,因为它们不会关注
    :资源路径。详情如下:

  • 依靠
  • 当你思考这个问题时,你就会明白为什么不收集资源;它们不是Clojure名称空间。在我看来,这是一个连贯的设计决策,命名为“
    ns tracker

    不过,从实用的角度来看,很明显,从基座的角度来看,当资源发生变化时,我们确实希望重新加载


    现在,让我补充一件事。从工具的角度来看,假设您在resources目录上设置了一个watch。即便如此,以粒度的方式确定哪些特定的Clojure命名空间将受到影响也不容易。一个资源可以被多个
    deftemplate
    用作一个模板。因此,一个资源更改可能会影响多个Clojure命名空间。指向资源的字符串甚至可以动态构造。因此,在一般情况下,计算要重新加载的确切最小名称空间集可能是不可能的

    综上所述,每当资源发生变化时,重新加载所有Clojure名称空间应该是“简单”且足够安全的


    总之,我自己并没有解决这个问题,但希望我上面所解释的能帮助球向前移动



    我无法找到现成的有效解决方案,因此我最终编写了一个小的环形包装器来完成这项工作,请参见

    我也面临着这个问题。这让你发疯,不是吗?我要深入研究代码,看看。