Отсутствует * в Clojure с Лейном и Рингом
Я бегу Lein 2 и сидр 0.7.0. Я сделал пример приложения для кольца, которое использует ring/run-jetty для запуска.
(ns nimbus-admin.handler
(:require [compojure.core :refer :all]
[compojure.handler :as handler]
[clojure.tools.nrepl.server :as nrepl-server]
[cider.nrepl :refer (cider-nrepl-handler)]
[ring.adapter.jetty :as ring]
[clojure.tools.trace :refer [trace]]
[ring.util.response :refer [resource-response response redirect content-type]]
[compojure.route :as route])
(:gen-class))
(defroutes app-routes
(GET "/blah" req "blah")
(route/resources "/")
(route/not-found (trace "not-found" "Not Found")))
(def app (handler/site app-routes))
(defn start-nrepl-server []
(nrepl-server/start-server :port 7888 :handler cider-nrepl-handler))
(defn start-jetty [ip port]
(ring/run-jetty app {:port port :ip ip}))
(defn -main
([] (-main 8080 "0.0.0.0"))
([port ip & args]
(let [port (Integer. port)]
(start-nrepl-server)
(start-jetty ip port))))
затем подключите к нему с помощью сидра, как:
cider-connect 127.0.0.1 7888
Я могу перейти к своему сайту и eval-формам в emacs, и он обновит то, что работает вживую в моей сессии nrepl, так что это здорово.
Я не могу видеть вывод, либо с (print "test") (println "test") (trace "out" 1)
Наконец, мой файл проекта:
(defproject nimbus-admin "0.1.0"
:description ""
:url ""
:min-lein-version "2.0.0"
:dependencies [[org.clojure/clojure "1.6.0"]
[com.climate/clj-newrelic "0.1.1"]
[com.ashafa/clutch "0.4.0-RC1"]
[ring "1.3.1"]
[clj-time "0.8.0"]
[midje "1.6.3"]
[org.clojure/tools.nrepl "0.2.6"]
[ring/ring-json "0.3.1"]
[org.clojure/tools.trace "0.7.8"]
[compojure "1.1.9"]
[org.clojure/data.json "0.2.5"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]
]
:plugins [[lein-environ "1.0.0"]
[cider/cider-nrepl "0.7.0"]]
:main nimbus-admin.handler)
Я начинаю сайт с lein run
Изменить Я могу видеть вывод, только при использовании (.println System/out msg)
4 ответа
Ты пытался (.println System/out msg)
? У меня была такая же проблема, и это сработало для меня.
Можно просто поместить операторы печати в ваш код вручную. Если вы хотите распечатать информацию о каждом запросе, вы можете добавить промежуточное программное обеспечение. Обработчик, который вы передаете на причал, является функцией от запросов Ring до ответов Ring. Запрос вызова и ответы - это просто карты, см. В спецификации вызова дополнительные ключи, которые они должны содержать. Промежуточное ПО - это просто функция, которая принимает обработчик в качестве первого аргумента и возвращает обработчик.
Пример функции промежуточного программного обеспечения для вывода основной информации о запросах и ответах:
(defn log-middleware [handler]
(fn [request]
(let [response (handler request)]
(println "=>" (name (:request-method request)) ":" (:uri request))
(println "<=" (:status request))
response)))
Это промежуточное программное обеспечение должно печатать в буфер реплики cider, но иногда cider ведет себя странно и отправлять вывод *Messages*
или буфер сервера nrepl.
Вы используете это промежуточное ПО, применяя его к своим обработчикам:
(def application (log-middleware (handler/site routes)))
Заголовки могут быть напечатаны таким образом: просто получить :headers
поле формы запроса карты и распечатать его.
Использование (flush)
после вашего print
выражения для принудительного вывода.
Библиотека Prone может вам помочь. Он имеет кольцевое промежуточное программное обеспечение для лучшей отчетности об исключениях, которое также имеет возможность отладки. При отладке вы можете проверить любые локальные привязки, а также запрос Ring.
Вот видео, которое демонстрирует, как это работает