forked from ring-clojure/ring
-
Notifications
You must be signed in to change notification settings - Fork 1
开发环境设置
shengdoushi edited this page Jan 6, 2019
·
2 revisions
有多种方法可以优化您的开发工作流程:
- 在源文件更改时重新加载命名空间
- 使用 lein-ring 插件进行设置
- boot 设置
- 使用一个模块生命周期的管理库 参看交互环境(Interactive Development)
第一种方法更快速,且易于设置。ring-devel 库中为此提供了中间件。
不过,命名空间重新加载并不会重新加载应用程序的状态。因此,某些情况下,您可能需要重新启动服务器。
lein-ring 插件是最直接的方式。创建两个文件
- src/sample.clj
- project.clj
src/sample.clj 中提供了一个简单的服务: 返回 'Hello World'.
(ns sample)
(defn handler [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello world."})
将 lein-ring 添加到您的 project 文件中, 然后在 src/sample.clj 中配置下 ring handler:
:ring {:handler sample/handler}
一个最小的 project.clj 文件如下:
(defproject lein-demo "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[ring/ring-core "1.6.3"]
[ring/ring-jetty-adapter "1.6.3"]
[ring/ring-devel "1.6.3"]]
:ring {:handler sample/handler}
:plugins [[lein-ring "0.12.1"]])
启动一个开发服务器:
lein ring server
访问服务器地址: http://localhost:3000
服务器将自动重新加载源目录中的任何已修改的文件。
Boot是Clojure的一个构建工具,http://boot-clj.com
创建两个文件
- build.boot
- src/sample.clj
一个最小的 build.boot 内容如下
(set-env!
:resource-paths #{"src"}
:dependencies '[[org.clojure/clojure "1.8.0"]
[ring/ring-core "1.6.3"]
[ring/ring-jetty-adapter "1.6.3"]
[ring/ring-devel "1.6.3"]])
(deftask dev
"Run server hot reloading Clojure namespaces"
[p port PORT int "Server port (default 3000)"]
(require '[sample :as app])
(apply (resolve 'app/run-dev-server) [(or port 3000)]))
src/sample.clj 中提供了一个简单的服务: 返回 'Hello World'.
(ns sample
(:require
[ring.adapter.jetty :refer [run-jetty]]))
(defn handler [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello world"})
(defn run-dev-server
[port]
(run-jetty handler {:port port}))
检查您的启动任务
boot dev -h
运行服务器
boot dev
接下来,我们可以添加热加载。检查_build.boot_中的依赖项是否包含 ring/ring-devel。将之前的 handler 包装到 wrap-reload handler 中。
(ns sample
(:require
[ring.adapter.jetty :refer [run-jetty]]
[ring.middleware.reload :refer [wrap-reload]]))
(defn handler [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello world"})
(def dev-handler
(wrap-reload #'handler))
(defn run-dev-server
[port]
(run-jetty dev-handler {:port port}))
重新启动服务器并访问 http://localhost:3000
现在,服务器将自动重新加载源目录中的任何已修改的文件。