标签: ring

读取clojure文件时出现EOF异常

当我在环形码头服务器中运行Web应用程序时,我得到了EOF异常,我无法解决这个问题,因为没有关于错误发生在哪一行的线索.我在我的clojure代码上使用compojure和hiccup.我正在使用Emacs 23作为编辑器.

以下是例外的一部分:

Exception in thread "main" java.lang.Exception: EOF while reading (core.clj:66)
        at clojure.lang.Compiler.load(Compiler.java:5863)
        at clojure.lang.RT.loadResourceScript(RT.java:340)
        at clojure.lang.RT.loadResourceScript(RT.java:331)
.................
............
.........
.....
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢!

emacs jetty clojure ring hiccup

9
推荐指数
1
解决办法
5307
查看次数

在生产环 - clojure服务器上重新加载代码

在不重新启动整个JVM的情况下,将新代码推送到生产环服务器的最佳方法是什么?

目前我在生产中使用wrap-reload,但这对我来说并不适用,因为有时我想在ring开始使用新代码处理请求之前在repl中运行命令(例如进行数据库迁移).此外,各种博客和教程都说不要在生产中使用wrap-reload,尽管我不明白为什么不这样做.

我已经提出了以下解决方案,但我承认我并不深入了解引擎盖下发生了什么.我想知道我是否可以得到一个人的理智检查.这种技术看起来合理吗?

这个想法是有一个路径(/ admin/reload-clj)导致所有的clojure代码被重新加载.

(defonce ^:dynamic *jetty*)
(declare reload-clj)

(defn app [req]
 ...
 (when (= (req :uri) "/admin/reload-clj") (reload-clj req))
 ...)

(defn start-jetty []
 (let [j (run-jetty app {:port (http-port) :join? false :max-threads 16})]
   (dosync (ref-set *jetty* j))
   j))

(defn reload-clj [req]
 (future
    (log/info "Reloading clojure code...")
    (require '(whrusrv admin main utils wdb) :reload-all)
    (.stop @*jetty*)
    (start-jetty)
    (log/info "Clojure reload success!"))
 {:status 200
  :headers {"Content-Type" "text/plain"}
  :body "Reloading..."})

(defn -main [& args]
 (start-jetty))
Run Code Online (Sandbox Code Playgroud)

clojure ring

9
推荐指数
1
解决办法
1185
查看次数

在环形应用程序中捕获异常的惯用方法

在环形应用程序中处理异常的惯用方法是什么?我想捕获异常并返回500页.我怎么做 ?

我在下面的代码中使用小胡子,但它不起作用 -

(def my-app (try
              (app
               (wrap-logger true)
               wrap-keyword-params
               wrap-params
               wrap-file-info
               (wrap-file "resources/public/")
               [""]  (index-route @prev-h nil)
               ["getContent"] (fetch-url)
               ["about"] "We are freaking cool man !!"
               [&] (-> "Nothing was found" response (status 404) constantly))
              (catch Exception e
                (app
                 [&] (-> "This is an error" response (status 500) constantly)))
Run Code Online (Sandbox Code Playgroud)

clojure ring

9
推荐指数
1
解决办法
2551
查看次数

ring clojure的目录资源管理器中间件

是否有任何可用的环中间件可以模仿像apache这样的标准文件服务器处理路由的方式

所以处理程序看起来像这样:

(wrap-dir "resources/public/")
Run Code Online (Sandbox Code Playgroud)

这非常相似

(wrap-file "resources/public/")
Run Code Online (Sandbox Code Playgroud)

但也会输出目录列表.

clojure ring

9
推荐指数
0
解决办法
222
查看次数

是否有某种规范的edn响应我们可以用于响铃?

我一直在阅读edn规范,并希望将它集成到我的应用程序中.但是,我不知道如何在clojure和客户端之间传输edn请求.我们是否在响应头中放入了内容类型的application/edn并只发送了prn输出字符串?

clojure ring edn

9
推荐指数
1
解决办法
1468
查看次数

在Clojure的Ring Web应用程序中生成并流式传输zip文件

我有一个需要的Ring处理程序:

  • 压缩几个文件
  • 将Zip流式传输到客户端.

现在我有点工作,但只有第一个压缩条目被流式传输,然后停止/停止.我觉得它与刷新/流媒体有关,这是错误的.

这是我的(compojure)处理程序:

(GET "/zip" {:as request}
            :query-params [order-id   :- s/Any]
            (stream-lessons-zip (read-string order-id) (:db request) (:auth-user request)))
Run Code Online (Sandbox Code Playgroud)

这是stream-lessons-zip函数:

(defn stream-lessons-zip
  []
  (let [lessons ...];... not shown

  {:status 200
   :headers {"Content-Type" "application/zip, application/octet-stream"
             "Content-Disposition" (str "attachment; filename=\"files.zip\"")
   :body (futil/zip-lessons lessons)}))
Run Code Online (Sandbox Code Playgroud)

我使用管道输入流来进行流式处理:

(defn zip-lessons
 "Returns an inputstream (piped-input-stream) to be used directly in Ring HTTP responses"
[lessons]
(let [paths (map #(select-keys % [:file_path :file_name]) lessons)]
(ring-io/piped-input-stream
  (fn [output-stream]
    ; build a zip-output-stream from a normal output-stream
    (with-open [zip-output-stream (ZipOutputStream. …
Run Code Online (Sandbox Code Playgroud)

zip clojure stream ring

9
推荐指数
1
解决办法
460
查看次数

没有码头的环/组合

我知道可以使用创建war文件lein ring war,但它似乎仍然包含jetty依赖项.当我构建战争(并在tomcat上部署)时,有没有办法排除jetty依赖项?

如果我不能做到这一点,或者只是额外的罐子/类文件被打包到战争中但从未真正使用过?

clojure compojure ring leiningen

8
推荐指数
1
解决办法
460
查看次数

clojure和ring:响应中的utf-8来自'?'

我很惊讶地发现我的铃声应用程序没有正确服务utf-8.我把它减少到一个简单的测试用例,有没有人知道如何确保这总是将utf-8返回给浏览器?

(ns utf8test.core)

(defn app
  [request]
  {:status 200 :body "???"}) 
Run Code Online (Sandbox Code Playgroud)

在project.clj中(使用lein-ring插件):

:ring {:handler utf8test.core/app} 
Run Code Online (Sandbox Code Playgroud)

在终端:

> lein ring server
Run Code Online (Sandbox Code Playgroud)

--->ɮѪÏ'(这是错误的,应该是ɮѪΘ)

优选地,也是一种适用于tomcat的方法,因为这是部署app的地方.

谢谢!

clojure utf-8 ring

8
推荐指数
1
解决办法
1540
查看次数

在开发基于组件/环的应用程序时使用emacs/cider的正确方法是什么?

在开发基于组件/环的clojure应用程序时,emacs/cider的正确工作流程/使用途径是什么?

我觉得我可以"附加"到我正在运行的compojure/ring-process,更改其代码,读取/更改其数据,但我无法理解我该如何做到这一点?什么是正确的方法?

我所做的?

lein new compojure my-project
cd my-project
lein ring server-headless
Run Code Online (Sandbox Code Playgroud)

开发服务器现在运行.如果我更改项目中的文件,它们将自动重新加载.那很好.但我想要的是,我直接附加到流程并更改其功能,例如.

我明白这是可能的,但我无法理解.

emacs clojure compojure ring leiningen

8
推荐指数
1
解决办法
1284
查看次数

如何使用带有作为组件的环形处理器的figwheel?

我想用figwheel重新加载我正在玩的全部项目的前端.

后端提供REST api,并组织为一组组,我在我的main函数中创建一个系统(我使用duct来创建处理程序组件).我想使用闭包将状态传递给我的处理程序,但配置figwheel以使用我的处理程序的唯一方法似乎是设置ring-handler密钥project.clj,这需要我在lein启动时传递在命名空间中定义的处理程序.

那么 - 当我进行组件启动时,有没有办法配置figwheel?我在Closure仍然很新,所以我很可能会错过一些看得见的东西.

将状态作为参数传递给环处理程序?是一个类似的问题,但答案是涉及将处理程序绑定到命名空间顶层的var,我正在努力避免.

clojure ring

8
推荐指数
1
解决办法
934
查看次数

标签 统计

clojure ×10

ring ×10

compojure ×2

emacs ×2

leiningen ×2

edn ×1

hiccup ×1

jetty ×1

stream ×1

utf-8 ×1

zip ×1