2013-04-05 9 views
5

Clojureでリングと桟橋を使用して簡単なWebサービスを作成する場合は、this exampleに従っています。ClojureのリングでJettyの例を実行する方法

私はproject.cljでこの持っている:SRC/ws_example/web.clj

(ns ws-example.web 
    (:use compojure.core) 
    (:use ring.middleware.json-params) 
    (:require [clj-json.core :as json])) 

(defn json-response [data & [status]] 
    {:status (or status 200) 
    :headers {"Content-Type" "application/json"} 
    :body (json/generate-string data)}) 

(defroutes handler 
    (GET "/" [] 
    (json-response {"hello" "world"})) 

    (PUT "/" [name] 
    (json-response {"hello" name}))) 

(def app 
    (-> handler 
    wrap-json-params)) 

(defproject ws-example "0.0.1" 
    :description "REST datastore interface." 
    :dependencies 
    [[org.clojure/clojure "1.5.1"] 
    [ring/ring-jetty-adapter "0.2.5"] 
    [ring-json-params "0.1.0"] 
    [compojure "0.4.0"] 
    [clj-json "0.5.3"]] 
    :dev-dependencies 
    [[lein-run "1.0.0-SNAPSHOT"]]) 

このスクリプトで/ run.clj

(use 'ring.adapter.jetty) 
(require '[ws-example.web :as web]) 

(run-jetty #'web/app {:port 8080}) 

そして、これを

ただし、実行すると:

lein run script/run.clj 

私はこのエラーを取得する:

No :main namespace specified in project.clj. 

は、なぜ私はこれを取得していると私はそれをどのように修正するのですか?

+0

リンク先のチュートリアルでは、Leiningen 1.xを使用しています。おそらくlein2を使用しているはずです。 – Alex

+0

私が学んで以来、ちょうどうまくいったチュートリアルを見つけることができれば嬉しいです。助言がありますか?私はClojure –

答えて

2

あなたはどこか-mainにその(run-jetty)ものを配置し、lein help runからproject.clj

よう
:main ws-example.core) 
+0

でWebサービスを作成したいと思います、あなたはsomehwhereについての提案がありますか? run-jettyはrun.cljというスクリプトにあります。 –

0

にそれを追加する必要があります。

USAGE: lein run -m NAMESPACE[/MAIN_FUNCTION] [ARGS...] 
Calls the main function in the specified namespace. 

だから、あなたはどこかscript.cljを配置する必要がありますプロジェクトのソースパスに追加し、それを次のように呼び出します。

lein run -m script 
+0

これはlein2を使用しています。 'lein run'へのコマンドは、1.xでは少し異なります。 – Alex

3

lein runlein help runによる)の目的は「プロジェクトの主機能を実行する」ためです。 ws-example.web名前空間に-main関数がなく、project.cljファイルに:mainファイルが指定されていません。これはlein runが苦情を申し立てているものです。

これを修正するには、いくつかの選択肢があります。 run-jettyコードをws-example.web関数の新しい-main関数に移動してから、lein run -m ws-example.webと言うことができます。または、それを行うことができますまたproject.clj:main ws-example.web行を追加し、ちょうどlein runと言う。または、lein exec pluginを使用して、名前空間ではなくファイルを実行してみることもできます。

詳細については、Leiningen Tutorialをご覧ください。