小编sch*_*eho的帖子

使用Docker开发Clojure webapp的工作流程

我正在尝试使用Docker开始使用Clojure开发Web应用程序,并且不确定要走哪条路.从我到目前为止所阅读的内容以及正式的Docker Clojure回购中,基本上有两种可能的方法:

  • 调用lein ring server(交互式或作为Dockerfile中的CMD)或
  • 使用Dockerfile将您的应用程序编译为uberjar并java -jar用作CMD生成的jar文件.

前者在我认为开发环境不尽可能接近生产环境的意义上是有问题的,因为我们可能正在使用:devleiningen配置文件添加人们在生产中严格不需要的东西(提供的数量很少)工具和"信息",即暴露的生产服务器上的代码总是一个好主意.然而,后者似乎有完全相反的问题:现在每个更改都需要基本上重建图像(想想编辑 - 编译 - 运行周期),因此您将失去lein ring对修改功能的良好重新编译.

人们如何在实践中使用这种组合?

PS:我知道在实践中可能还有其他一些操作模式(例如使用Immutant或Tomcat作为部署目标或使用像Hudson这样的CI服务器等).我先问这里最基本的设置.

clojure docker

5
推荐指数
1
解决办法
1116
查看次数

与nrepl的lein ring服务器不尊重cider-nrepl

当我启动当前项目lein ring server并尝试通过苹果酒从Emacs连接到它时,我收到以下警告:

; CIDER 0.8.2 (Java 1.7.0_51, Clojure 1.6.0, nREPL 0.2.6)
WARNING: The following required nREPL ops are not supported: 
apropos classpath complete eldoc info inspect-start inspect-refresh inspect-pop inspect-push inspect-reset macroexpand ns-list ns-vars resource stacktrace toggle-trace-var toggle-trace-ns undef
Please, install (or update) cider-nrepl 0.8.2 and restart CIDER
user> 
Run Code Online (Sandbox Code Playgroud)

不过,我有一个依赖于[cider/cider-nrepl "0.8.2"]project.clj.当我跑步时,这工作正常,lein repl然后我可以从苹果酒中连接好:

; CIDER 0.8.2 (Java 1.7.0_51, Clojure 1.6.0, nREPL 0.2.6)
swedishchef.handler>
Run Code Online (Sandbox Code Playgroud)

我可以看到我从leiningen wrt得到了两个不同的消息.nREPL,取决于我如何开始:

[sugarcube->swedishchef]lein ring server
See https://github.com/technomancy/leiningen/wiki/Repeatability)
Started nREPL server …
Run Code Online (Sandbox Code Playgroud)

emacs clojure cider ring leiningen

5
推荐指数
1
解决办法
1093
查看次数

无效的防伪令牌

当我尝试在使用Compojure模板创建的Clojure Webapp项目中使用POST方法时,得到了“ 无效的防伪令牌 ”。

我进行了研究,Ring中间件为来自其他站点的经过身份验证的请求创建了CSRF(跨站点请求表单)令牌(以使用已经登录并访问不允许访问的页面的其他人的凭据)。

这些令牌是默认的,我们需要在WebApp周围使用ring.middleware的wrap-params。无法到达任何地方。请帮忙 !!如何摆脱无效的防伪令牌

我的handler.clj文件是:

(ns jsonparser-webapp.handler
   (:require [compojure.core :refer :all]
        [compojure.route :as route]
        [jsonparser-webapp.views :as views])
   (:use [ring.middleware.params :only [wrap-params]])

(defroutes app-routes
  (GET "/" 
    [] 
    (views/home-page))
  (GET "/goto" 
    [] 
    (views/goto))
  (POST "/posted"
     {params :params} 
     (views/posted params))
  (route/not-found "Not Found"))

(def app
    (wrap-params app-routes site-defaults))
Run Code Online (Sandbox Code Playgroud)

我的views.clj文件是

(ns jsonparser-webapp.views
   (:require [hiccup.page :as hic-p]
             [hiccup.form :as hf]))

(defn gen-page-head
  [title]
  [:head
     [:title title]])

(defn home-page
  []
  (hic-p/html5
      (gen-page-head "Json Parser Home.")
      [:h1 "Welcome."]
      [:p "Json Web App."] …
Run Code Online (Sandbox Code Playgroud)

eclipse clojure compojure ring counterclockwise

5
推荐指数
1
解决办法
784
查看次数

Clojure将名称定义为乘数

任何人都可以解释为什么在下面的代码中,函数的名称在第一部分作为*(乘数)?

(defn bar
     ([a b]   (bar a b 100))
     ([a b c] (* a b c)))
Run Code Online (Sandbox Code Playgroud)

bar两个args (bar 2 3)产量(* 2 3 100)

clojure defn

0
推荐指数
1
解决办法
61
查看次数

标签 统计

clojure ×4

ring ×2

cider ×1

compojure ×1

counterclockwise ×1

defn ×1

docker ×1

eclipse ×1

emacs ×1

leiningen ×1