Fork me on GitHub
#boot
<
2019-11-29
>
respatialized20:11:29

Hey, #boot ! I'm having trouble with the watch task when trying to generate content for perun dynamically. I use clojure2d to generate images on the fly and then refer to those images using hiccup data structures that perun's boot tasks render into HTML. This works fine for one-off builds. The problem: an infinite loop when boot watch is part of the dev cycle. I have adapted one of the perun examples like so:

(set-env!
 :source-paths #{"src"}
 :resource-paths #{"content" "resources"}
 :asset-paths #{"output"}
...)

(deftask dev
  "Build and serve the perun content locally."
  []
  (comp (watch :exclude #{#"output\\/*"})
        (build)
        (serve :resource-root "public")))
The images I'm trying to display get generated from the functions called in /src, and written to /output. No matter what I do, watch always picks up the images after they write, resulting in an endless re-render cycle. I'm trying to arrange it using :exclude so that the build/watch cycle renders the content from clojure2d functions defined in /src every time they change, but the output images are in a directory that is ignored by watch so that it doesn't trigger this loop. I haven't yet had much success. Is this as simple as not regexing the path properly? I tested using re-match in the REPL but I don't know if adding a dir to the Boot environment via set-env overrides :exclude in watch.

simple_smile 4
respatialized21:11:01

I think I fixed it. It was as simple as adding /target to :exclude in watch. 😅

👍 4
respatialized21:11:01
replied to a thread:Hey, #boot ! I'm having trouble with the `watch` task when trying to generate content for `perun` dynamically. I use `clojure2d` to generate images on the fly and then refer to those images using `hiccup` data structures that `perun`'s boot tasks render into HTML. This works fine for one-off builds. *The problem*: an infinite loop when `boot watch` is part of the dev cycle. I have adapted one of the `perun` examples like so: (set-env! :source-paths #{"src"} :resource-paths #{"content" "resources"} :asset-paths #{"output"} ...) (deftask dev "Build and serve the perun content locally." [] (comp (watch :exclude #{#"output\\/*"}) (build) (serve :resource-root "public"))) The images I'm trying to display get generated from the functions called in `/src`, and written to `/output`. No matter what I do, `watch` always picks up the images after they write, resulting in an endless re-render cycle. I'm trying to arrange it using `:exclude` so that the `build/watch` cycle renders the content from `clojure2d` functions defined in `/src` every time they change, but the output images are in a directory that is ignored by `watch` so that it doesn't trigger this loop. I haven't yet had much success. Is this as simple as not regexing the path properly? I tested using `re-match` in the REPL but I don't know if adding a dir to the Boot environment via `set-env` overrides `:exclude` in `watch`.

I think I fixed it. It was as simple as adding /target to :exclude in watch. 😅

👍 4