Обслуживание данных с помощью Ring и Compojure

Я настраиваю и настраиваю веб-приложение для обслуживания данных JSON http://www.ericrochester.com/clj-data-analysis/data/census-race.json файл статически.

Мои зависимости:

  :dependencies [[org.clojure/clojure "1.5.1"]
                 [org.clojure/clojurescript "0.0-2197"]
                 [ring/ring-core "1.1.7"]
                 [ring/ring-jetty-adapter "1.1.7"]
                 [compojure "1.1.3"]
                 [hiccup "1.0.2"]
                 [lein-cljsbuild "0.2.10"]]

Как следует из названия, я использую Ring в качестве плагина для разработки, т.е.

  :plugins [[lein-ring "0.8.3"]]

Лейнингенский проект

   (ns test-app.core
   (:require [compojure.route :as route]
             [compojure.handler :as handler]
             [clojure.string :as str])
   (:use compojure.core
             ring.adapter.jetty
             [ring.middleware.content-type :only
             (wrap-content-type)]
             [ring.middleware.file :only (wrap-file)]
             [ring.middleware.file-info :only
             (wrap-file-info)]
             [ring.middleware.stacktrace :only
             (wrap-stacktrace)]
             [ring.util.response :only (redirect)]))

и в проекте.clj

  :ring {:handler test-app.core/app}

что я не уверен, скажет ли это Ring, где находится веб-приложение.

Более того, я не уверен, как статически обслуживать файл данных JSON. Я читал, что «Ring обслуживает статические файлы из каталога /resources вашего проекта. В этом случае создайте каталог /resources/data и поместите файл данных, который вы скачали с http://www.ericrochester.com/clj-data-analysis/data/census-race.json в него».

В основном это последняя часть о создании каталога /resources/data, где я потерялся в реализации. Может ли кто-нибудь показать, как делается эта часть?

Если я смогу научиться преодолевать это, я собираюсь создавать маршруты и обработчики, т.е.

  (defroutes site-routes
     (GET "/" [] (redirect "/data/census-race.json"))
     (route/resources "/")
     (route/not-found "Page not found"))

и

 (def app
    (-> (handler/site site-routes)
    (wrap-file "resources")
    (wrap-file-info)
    (wrap-content-type)))

person sunspots    schedule 31.03.2014    source источник


Ответы (2)


и в проекте.clj

:кольцо {:обработчик test-app.core/app}

что я не уверен, скажет ли это Ring, где находится веб-приложение.

Когда вы запустите $ lein ring server-headless, он будет искать app в пространстве имен test-app.core. В вашем файле core.clj должно быть что-то вроде следующего:

(def app
  (handler/site app-routes))

В основном это последняя часть о создании каталога /resources/data, где я потерялся в реализации. Может ли кто-нибудь показать, как делается эта часть?

В корне каталога вашего проекта у вас должна быть папка resources. Создайте папку data внутри папки resources.

Я не уверен, какая у вас проблема?

person deadghost    schedule 01.04.2014
comment
Я создал папку data в папке resources, но не знаю, как загрузить ericrochester.com/clj-data-analysis/data/census-race.json на него... @deadghost - person sunspots; 01.04.2014
comment
@sunspots Щелкните правой кнопкой мыши -> сохранить страницу как? - person deadghost; 02.04.2014

Если ваш проект выглядит так:

project.clj
src/test_app/core.clj
resources/public/data/census-race.json

Затем ваш обработчик site-routes будет обслуживать этот файл JSON, когда вы запрашиваете путь /data/census-race.json.

Вам не нужно какое-либо дополнительное ПО промежуточного слоя, такое как wrap-file, wrap-file-info или wrap-content-type, поскольку compojure.route/resources уже делает все, что вам нужно.

person John Cromartie    schedule 01.04.2014
comment
Я не знаю, как вставить census-race.json в путь resources/data @JohnCromartie - person sunspots; 01.04.2014