如何通过逆时针(或la clojure)运行/调试compojure web app
我正在尝试用compojure编写我的第一个web应用程序。我正在使用ccw,我如何通过逆时针(或la clojure)运行/调试compojure web app,clojure,compojure,counterclockwise,la-clojure,Clojure,Compojure,Counterclockwise,La Clojure,我正在尝试用compojure编写我的第一个web应用程序。我正在使用ccw,我将新项目、Clojure项目归档,并使用“compojure”leiningen模板。以project.clj的样子结束 (defproject asdf "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :dependencies [[org.clojure/clojure "
将新项目、Clojure项目归档,并使用“compojure”leiningen模板。以project.clj的样子结束
(defproject asdf "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.4.0"]
[compojure "1.1.5"]]
:plugins [[lein-ring "0.8.2"]]
:ring {:handler asdf.handler/app}
:profiles
{:dev {:dependencies [[ring-mock "0.1.3"]]}})
src/asdf/handler.clj看起来像
(ns asdf.handler
(:use compojure.core)
(:require [compojure.handler :as handler]
[compojure.route :as route]))
(defroutes app-routes
(GET "/" [] "Hello World")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
我发现我可以使用leinringserver
从命令行运行它,但我不确定如何从eclipse运行它。我当然希望不仅能够运行它,而且能够调试它并设置断点等等。在eclipse中有这样做的方法吗?或者,如果没有,那么IntelliJ/La Clojure呢?(目前我有点害怕emacs,但如果它超级简单,我可能会尝试一下)
或者,这不是compojure应用程序的典型开发过程吗?(如果没有,是什么?只需运行leinringserver
并祈祷?)
如果有什么不同的话,这是在Win7上。这里有一个配方,对我开发戒指应用程序非常有用:
- 确保为您的项目正确配置了leiningen支持(如有疑问,请执行一次):
- 在包资源管理器中,选择项目,并调用上下文命令
Leiningen>Reset configuration
- 然后还调用
Leiningen>updatedependencies
命令
- 您应该在项目中看到一个
Leiningen Dependencies
虚拟节点,引用项目的直接依赖项和可传递依赖项
- 选择
asdf.handler
文件,右键单击,然后Debug as>Clojure应用程序
- 在编辑器中打开
asdf.handler
命名空间
- 光标当前仍在编辑器中,键入
Ctrl+Alt+N
跳转到REPL,同时将REPL的当前名称空间切换到asdf.handler
- 通过键入
(app)
+Enter
(或Ctrl+Enter
(如果光标不在行尾)启动应用程序
现在,您可以在编辑器和REPL之间导航
- 要将编辑器内容发送到REPL,请选择它,然后点击
Ctrl+Enter
- 如果在没有选择的情况下按Ctrl+Enter键,整个“顶级表达式”(例如defn)将发送到REPL
- 要将整个文件重新发送到REPL,请键入
Ctrl+Alt+S
- 以下是特定于CCW的所有键盘快捷键列表:
请注意,逆时针方向的未来版本将与Leiningen 2进行更多的集成,但就目前的情况而言,开发ring
应用程序的本质使得如上所述的引导过程并不那么痛苦,IMHO您可以通过以下步骤在IntelliJ IDEA和La Clojure上运行Compojure/Ring应用程序:
使用leinpom
命令从leiningen的project.clj
生成pom.xml
照常使用IntelliJ IDEA导入maven项目。您可能需要确保类路径中有Clojure jar
加载项目后,可以使用工具->启动Clojure控制台启动Clojure REPL
要将Clojure文件加载到REPL,请选择工具->Clojure REPL->将文件加载到REPL
之后,要启动一个Ring应用程序,您只需加载一个Clojure文件,该文件调用Ring.adapter.jetty/运行jetty
在http://localhost:4004/
将如下所示:
(require 'compojure.core)
(require 'ring.adapter.jetty)
(ring.adapter.jetty/run-jetty
(compojure.core/routes (compojure.core/ANY "/" [] "Hello world!"))
{:port 4004 :join? false})
:join?
选项很重要,如果将其设置为true(默认值),REPL将不接受更多命令。您的路由通常会更复杂,并且compojure。应使用核心/defroutes
或其他方式
您可以将这样的文件放在test
路径中,这样在IDEA之外运行项目时就不会加载它。
如果Clojure方面没有添加到您的模块中,您可以在文件->项目结构->模块中添加它
这里提供了一个完整的示例(jetty重新加载):-使用IDEA完成开发,并在Heroku上运行真实站点:
调试使用上述技术运行的Clojure应用程序也是可能的-您只需:
在IntelliJ IDEA中创建远程调试运行配置文件
在File->Project Structure->Modules->[your module]->Clojure facet->JVM Arguments字段中,从上面的概要文件(例如,agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005)中添加适当的JVM选项到REPL设置
使用工具启动REPL->启动Clojure控制台
启动远程调试配置文件
之后,您可以添加断点、检查变量等。在键入(app)
时,我得到ArityException错误的参数数(0)传递给:cookies$wrap cookies$fn clojure.lang.AFn.throwArity(AFn.java:437)
。哦,是的,对不起:app
只是主处理程序,不是服务器。您需要创建一个启动服务器的函数,类似于(defn start[](运行jetty#app{:join?false}))
,并且不要忘记向名称空间添加require:(:require[ring.adapter.jetty:only[run jetty]])
。因此,您必须调用的是(start)
,而不是(app)
几乎,我发现在类路径上找不到ring/adapter/jetty\u init.class或ring/adapter/jetty.clj,这样就出现了错误,但后来我在compojure的wiki上找到了这个链接,下面的第二节解决了这个问题:事实上,回顾过去,我想如果我只是添加了[ring]到项目依赖项(compojure仅依赖于[ring/ring core]),它会起作用。哦,是的,好的。对不起,我没有做compojure开发,但是做了直环开发,所以我不知道compojure还没有将ring.adapter.jetty添加到依赖项中。所以现在ccw和webapp开发对您来说一切都好了吗?(需要'asdf.handler')(使用'ring.server.standalone')(为asdf.handler/app提供服务)
对于compojure来说是一个更简单的测试文件。