【问题标题】:Clojure Ring wrap-reload is not workingClojure Ring wrap-reload 不起作用
【发布时间】:2017-03-28 15:58:45
【问题描述】:

这是我的 core.clj 文件

(ns lein-app.core
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.reload :refer [wrap-reload]]))

(use 'ring.adapter.jetty)

(defroutes app
  (GET "/" [] "<h1>Hello world</h1>")
  (route/not-found "<h1>Not found</h1>"))

(def reloadable-app
  (wrap-reload app))

(defn -main
  []
  (run-jetty reloadable-app {:port 3000}))

这是我的 project.clj

(defproject lein-app "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [
    [org.clojure/clojure "1.8.0"]
    [compojure "1.5.2"]
    [ring "1.5.0"]]

  :main lein-app.core)

当我运行 lein run 时,它会正确启动服务器,但如果我将 GET 响应更改为其他任何内容,例如我需要终止服务器并重新启动它。

【问题讨论】:

  • 但我的并没有被请求关闭。它根本不更新。
  • 所以(wrap-reload #'app) 不能解决您的问题?
  • 确实如此!但是如何..
  • 它在问题中进行了解释 - wrap-reload 需要捕获 var 本身,而不是能够重新加载它的值 - 这是一个你会发现许多“实时重新加载”的模式不同项目中的功能

标签: clojure


【解决方案1】:

如环issue#104 中所示,文档不是很清楚。

对于wrap-reload(以及其他库/项目中的类似功能),必须传递 var 本身而不是值。

像这样

(wrap-reload #'app)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多