7

我正在尝试用 compojure 编写我的第一个网络应用程序。我正在使用 ccw,并且我File-New-Project, Clojure Project使用“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))

我发现我可以从命令行运行它lein ring server,但我不确定如何从 eclipse 运行它。我当然希望不仅能够运行它,还能调试它并设置断点等。有没有办法在eclipse中做到这一点?或者,如果没有,IntelliJ/La-Clojure 怎么样?(我现在有点害怕emacs,但如果它超级简单,我可能会试一试)。

或者,这不是 compojure 应用程序的典型开发过程吗?(如果不是,那是什么?只是跑着lein ring server祈祷?)

如果它有所作为,这是在 Win7 上。

4

2 回答 2

5

Here's a recipe that's work great for me while developing Ring applications:

  • Ensure you have leiningen support properly configured for your projet (do it once if in doubt):
    • in the package explorer, select the project, and invoke the contextual command Leiningen > Reset configuration
    • then also invoke the Leiningen > Update dependencies command
    • you should see a Leiningen Dependencies virtual node in your project, referencing the direct and transitive dependencies of your project
  • Select the asdf.handler file, right click and then Debug as > Clojure Application
  • Open the asdf.handler namespace in an editor
  • With the cursor currently still in the editor, type Ctrl+Alt+N to jump to the REPL and switch the REPL's current namespace to asdf.handler at the same time
  • Start the app by typing (app) + Enter (or Ctrl+Enter if your cursor is not at the end of the line)

You can now navigate between the editors and the REPL.

  • To send editor content to the REPL, select it, and hit Ctrl+Enter
  • If you hit Ctrl+Enter without a selection, the whole 'top level expression' (e.g. a defn) will be sent to the REPL
  • To resend the whole file to the REPL, type Ctrl+Alt+S
  • the whole list of keyboard shortcuts specific to CCW is here: http://code.google.com/p/counterclockwise/wiki/EditorKeyBindingsFeatures

Note that a future version of Counterclockwise will integrate a little bit more with Leiningen 2, but as it currently stands, the very nature of developing ring applications make it not so painful to bootstrap things as described above, IMHO

于 2013-03-16T09:26:37.963 回答
3

您可以通过以下步骤在 IntelliJ IDEA 和 La Clojure 上运行 Compojure/Ring 应用程序:

  1. pom.xml从 leiningen 的project.cljusinglein pom命令生成。
  2. 像往常一样使用 IntelliJ IDEA 导入 maven 项目。您可能希望确保类路径中有 Clojure jar。
  3. 加载项目后,您可以使用 Tools -> Start Clojure Console 启动 Clojure REPL。
  4. 要将 Clojure 文件加载到 REPL,请选择工具 -> Clojure REPL -> 将文件加载到 REPL。

之后,要启动 Ring 应用程序,您只需加载调用ring.adapter.jetty/run-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.core/defroutes或者应该使用其他方式。

您可以将此类文件放在test路径中,这样在 IDEA 之外运行项目时就不会加载它。如果您的模块中没有添加 Clojure 方面,您可以在 File -> Project Structure -> Modules 中添加它。

此处提供了完整的示例(带有码头重新加载):https ://github.com/tlipski/ganelon-demo - 使用 IDEA 完成开发,并且在 Heroku 上运行真实站点:http: //ganelon.herokuapp.com

调试使用上述技术运行的 Clojure 应用程序也是可能的——您只需:

  1. 在 IntelliJ IDEA 中创建远程调试运行配置文件
  2. agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005在文件 -> 项目结构 -> 模块 -> [您的模块] -> Clojure facet -> JVM Arguments 字段的 REPL 设置中从上面的配置文件中添加适当的 JVM 选项(例如)。
  3. 使用工具启动 REPL -> 启动 Clojure 控制台。
  4. 启动远程调试配置文件。

之后,您可以添加断点、检查变量等。

于 2013-04-05T01:05:36.967 回答