2013-04-05 13 views
5

Podążam razem z this example w sprawie utworzenia prostego serwisu internetowego w Clojure za pomocą pierścienia i pomostu.Jak uruchomić przykład mola z pierścieniem w Clojure

mam to w moim project.clj:

(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"]]) 

to w skrypcie/run.clj

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

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

I to w 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)) 

Jednak po wykonaniu:

lein run script/run.clj 

otrzymuję ten błąd:

No :main namespace specified in project.clj. 

Dlaczego otrzymuję tego i jak to naprawić?

+0

Samouczek, z którym się łączysz, używa Leiningen 1.x - prawdopodobnie powinieneś używać lein2. – Alex

+0

Byłoby wspaniale, gdybym mógł znaleźć tutorial, który działał, odkąd się uczę. Jakieś sugestie? Chcę utworzyć serwis internetowy w Clojure –

Odpowiedz

2

Musisz umieścić ten (run-jetty) rzeczy do -main gdzieś, a następnie dodać go do project.clj jak

:main ws-example.core) 
+0

dzięki, czy masz sugestię dotyczącą czegoś innego? rzeczy run-jetty znajdują się w skrypcie o nazwie run.clj. –

0

Od lein help run:

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

Więc trzeba by umieścić script.clj gdzieś na ścieżce źródłowej projektu, a następnie wywołaj jako:

lein run -m script 
+0

To jest za pomocą lein2. Polecenia do 'lein run' są nieco inne w 1.x. – Alex

3

Otrzymujesz ten błąd, ponieważ celem lein run (zgodnie z lein help run) jest "Uruchomienie funkcji -poprawy głównej". Nie masz funkcji -main w przestrzeni nazw , ani nie masz pliku :main określonego w pliku , na co narzeka lein run.

Aby to naprawić, masz kilka opcji. Możesz przenieść kod run-jetty do nowej funkcji -main funkcji ws-example.web, a następnie powiedzieć lein run -m ws-example.web. Lub możesz to zrobić, a także dodać linię :main ws-example.web do project.clj, a następnie po prostu powiedz lein run. Lub możesz spróbować użyć pliku lein exec plugin, aby wykonać plik, a nie przestrzeń nazw.

Aby uzyskać więcej informacji, sprawdź numer Leiningen Tutorial.