Установка контекстного пути для маршрутов в Compojure - PullRequest
2 голосов
/ 22 февраля 2012

Я создаю веб-приложение Compojure, состоящее из двух проектов Clojure.Первый - это веб-приложение для визуализации некоторых данных, второй - более сложное приложение, которое должно использовать первое.

Я хочу иметь возможность запускать оба приложения одновременно с Run-Jetty от второго проекта.Это позволило бы второму веб-приложению вызывать URL-адрес первого из них для получения визуализации.

Я использую макрос context из Compojure, вот маршруты для второго приложения:

(def second-project-main-routes
  [
   (context "/second" request
            (GET "/viewsession" {session :session} (str session))
            (GET "/resetsession" [] (reset-session))
             ... other routes here ...
            (route/resources "/"))
  ])


(def second-all-routes
(concat second-project-main-routes
         first-project-routes)


(def second-app
  (-> (handler/site (apply routes second-all-routes))
      (wrap-base-url)))

;; to comment when building the JAR:
(defonce second-server (run-jetty #'second-app {:join? false :port 8080}))

и вот маршруты для первого приложения:

(def first-project-routes
[(context "/first" request
        (GET "/" [] (index-page))
        (route/files "/" {:root (str (System/getProperty "user.dir") "/data/public")})
        (route/resources "/"))])

У меня есть два файла main.js.Один в firstproject / resources / public / js / app / main.js и один в secondproject / resources / public / js / app / main.js

КогдаЯ просматриваю URL localhost: 8080 / first / app / js / main.js Я получаю main.js проекта second .Почему это?

1 Ответ

1 голос
/ 24 февраля 2014

Вы не сказали, как вы комбинируете их и работаете, поэтому я не знаю, как настроен ваш classpath. Однако у вас одинаковая конфигурация маршрута / ресурса в обоих контекстах, поэтому они оба будут извлекать контент из "public" в вашем classpath. Если и firstproject / resources, и secondproject / resources находятся в пути к классам, у вас будут конфликты. В этом случае кажется, что второй проект / ресурсы видны первыми, так что вот что вытягивается.

Возможно, вам следует изменить «public» в первом и втором приложениях на «public-first» и «public-second» соответственно. Затем вы используете подходящее местоположение ресурса для каждого контекста, не беспокоясь о пути к классам. Пример:

(route/resources "/" {:root "public-first"})
(route/resources "/" {:root "public-second"})
...