ring 2021-03-25

sorry if this isn’t the right place, but I’ve got some compojure routes like so

(defroutes routes
  (GET "/" [] (index/index))
  (route/resources "/")
  (route/not-found "oh no"))

i’ve got some static assets in resources/public

and they are 404'ing

is it laid out somewhere what directory to use?

Hmm, I thought the default was public on the classpath. Ah, how are you starting/running your app? Leiningen or Clojure CLI?

I can't remember whether lein puts resources on the classpath by default but deps.edn certainly doesn't -- you need to set :paths ["src" "resources"] in your deps.edn.

clj -M -m schepball.main

with a pretty bare deps.edn

i was wondering how the tool knew where to look

maybe “resources” was a magic jvm directory or something

is src in deps.edn by default?

{:deps
 {org.jsoup/jsoup {:mvn/version "1.13.1"}
  dk.ative/docjure {:mvn/version "1.14.0"}
  compojure/compojure {:mvn/version "1.6.2"}
  ring/ring {:mvn/version "1.9.2"}}}

this is my entire deps.edn

but i have code in src

that fixed it thank you!!

Yes, "src" is the default value for :paths. If you need additional directories, you need to specific (all of) them in your project deps.edn, so :paths ["src" "resources"] would need to be added.

You can see it reflected in the classpath here:

seanc@DESKTOP-30ICA76:~/clojure$ clojure -Spath
# just src on the path (plus Clojure's libs):
src:/home/seanc/.m2/repository/org/clojure/clojure/1.10.3/clojure-1.10.3.jar:/home/seanc/.m2/repository/org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar:/home/seanc/.m2/repository/org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar
seanc@DESKTOP-30ICA76:~/clojure$ clojure -Sdeps '{:paths ["src" "resources"]}' -Spath
# now we have src and resources on the path:
src:resources:/home/seanc/.m2/repository/org/clojure/clojure/1.10.3/clojure-1.10.3.jar:/home/seanc/.m2/repository/org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar:/home/seanc/.m2/repository/org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar