7

私は最初のWebアプリをcompojureで作成しようとしています。私はFile-New-Project, Clojure Projectccwを使用しており、「compojure」ライニンゲンテンプレートを使用しています。プロジェクト.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

リングアプリケーションを開発しているときに私に最適なレシピは次のとおりです。

  • プロジェクトに対してleiningenサポートが適切に構成されていることを確認します(疑わしい場合は1回実行します)。
    • パッケージエクスプローラーでプロジェクトを選択し、コンテキストコマンドを呼び出しますLeiningen > Reset configuration
    • Leiningen > Update dependencies次に、コマンドも呼び出します
    • プロジェクトの直接および推移的な依存関係を参照するLeiningen Dependencies仮想ノードがプロジェクトに表示されます。
  • ファイルを選択しasdf.handler、右クリックしてからDebug as > Clojure Application
  • asdf.handlerエディターで名前空間を開きます
  • カーソルが現在エディタ内にある状態で、入力してREPLにジャンプし、同時にCtrl+Alt+NREPLの現在の名前空間をに切り替えますasdf.handler
  • (app)+と入力してアプリを起動しますEnter(またはCtrl+Enterカーソルが行末にない場合)

これで、エディターとREPLの間を移動できます。

  • エディターのコンテンツをREPLに送信するには、それを選択して、Ctrl+Enter
  • 選択せずにヒットした場合Ctrl+Enter、「トップレベルの式」全体(たとえばdefn)がREPLに送信されます
  • ファイル全体をREPLに再送信するには、次のように入力しますCtrl+Alt+S
  • CCWに固有のキーボードショートカットの全リストはここにあります:http ://code.google.com/p/counterclockwise/wiki/EditorKeyBindingsFeatures

Counterclockwiseの将来のバージョンは、Leiningen 2ともう少し統合されることに注意してください。ただし、現在のところ、ringアプリケーション開発の性質上、上記のようにブートストラップするのはそれほど苦痛ではありません。IMHO

于 2013-03-16T09:26:37.963 に答える
3

次の手順で、IntelliJIDEAおよびLaClojureでCompojure/Ringアプリを実行できます。

  1. pom.xmlleiningenのproject.cljusinglein pomコマンドから生成します。
  2. 通常どおり、IntelliJIDEAを使用してMavenプロジェクトをインポートします。クラスパスにClojurejarがあることを確認することをお勧めします。
  3. プロジェクトがロードされると、「ツール」->「Clojureコンソールの開始」を使用してClojureREPLを開始できます。
  4. ClojureファイルをREPLにロードするには、「ツール」->「ClojureREPL」->「ファイルをREPLにロード」を選択します。

その後、Ringアプリを起動するには、を呼び出すClojureファイルをロードするだけです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ファセットがモジュールに追加されていない場合は、[ファイル]->[プロジェクト構造]->[モジュール]で追加できます。

完全なサンプル(突堤のリロードあり)は、https ://github.com/tlipski/ganelon-demoから入手できます。開発はIDEAで行われ、実際のサイトはHerokuで実行されます:http://ganelon.herokuapp.com

上記の手法で実行されるClojureアプリのデバッグも可能です。次のことを行うだけです。

  1. IntelliJIDEAでリモートデバッグ実行プロファイルを作成する
  2. 上記のプロファイル(例)から適切なJVMオプションをagentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005[ファイル]->[プロジェクト構造]->[モジュール]->[モジュール]->[Clojureファセット]->[JVM引数]フィールドのREPL設定に追加します。
  3. [ツール]->[Clojureコンソールの起動]でREPLを起動します。
  4. リモートデバッグプロファイルを開始します。

その後、ブレークポイントを追加したり、変数を検査したりできます。

于 2013-04-05T01:05:36.967 に答える