2014-03-12 32 views
6

我正在运行Lein 2和苹果酒0.7.0。我制作了一个使用ring/run-jetty启动的示例环形应用程序。在Clojure中丢失* Lein和Ring

(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)

回答

1

这是可能只是手动将打印语句放入代码中。 如果要打印有关每个请求的信息,可以添加中间件。 您传递给码头的处理函数是从响铃请求到响应响应的函数。 振铃请求和响应只是地图,请参阅Ring spec了解更多它们应该包含哪些键。中间件只是一个将处理程序作为第一个参数并返回处理程序的函数。中间件功能的

例,打印有关请求和响应的基本信息:

(defn log-middleware [handler] 
    (fn [request] 
    (let [response (handler request)] 
     (println "=>" (name (:request-method request)) ":" (:uri request)) 
     (println "<=" (:status request)) 
     response))) 

这个中间件应打印到苹果酒REPL缓冲区,但苹果酒有时行为异常 和输出发送到*Messages*或nrepl服务器缓冲。

您可以通过将其应用到您的处理器使用的中间件:

(def application (log-middleware (handler/site routes))) 

头可以打印这种方式:刚刚拿到:headers领域形成请求映射并打印。

+0

当我在代码中放置“clojure.tools.trace/trace”或“println”或“print”语句时,它们无处显示。他们不显示在我的苹果酒缓冲区,或我的运行网站的日志。当我使用苹果酒插孔或苹果酒连接来连接正在运行的网站时,这不起作用。 – Steve

0

Prone图书馆可能会帮助你。它有一个环形中间件,可以更好地进行异常报告,同时具有调试功能。调试时,您可以检查任何本地绑定以及响铃请求。

这里是一个video演示它是如何工作

3

你试过(.println System/out msg)?我有同样的问题,这对我有用。

+0

好的,那有效!但其他三个不!这里发生了什么?! – Steve

+0

希望我知道。我相信这个问题是由于尝试通过多个线程打印造成的。不知道为什么我的方法工作,而其他人失败。 clojure邮件列表可能是一个更好的选择。 – Chris

0

使用(flush)print表达式强制输出。

相关问题