2010-04-24 13 views
52

Piszę aplikację internetową za pomocą pierścienia i clojure. Korzystam z adaptera pomostu dla serwera programistycznego i emacsa/SLIME dla IDE. Podczas gdy wrap-reload pomaga, run-jetty blokuje moją sesję slime i chciałbym móc ją uruchomić/zatrzymać w dowolnym momencie bez konieczności uruchamiania jej w oddzielnej sesji terminalowej. Idealnie chciałbym zdefiniować agenta serwera i funkcje start-server i stop-server, które uruchamiały/zatrzymywały serwer wewnątrz agenta. czy to możliwe?Jak zatrzymać serwer Molo w clojure?

Odpowiedz

97

zazwyczaj mam linię w mojej aplikacji pierścienia, który wygląda tak:

(defonce server (run-jetty #'my-app {:port 8080 :join? false})) 

To zapobiega blokowaniu się rEPL. Pozwala również na przekompilowanie tego pliku bez obawy, że mój serwer zostanie ponownie zdefiniowany. To także pozwala oddziaływać na REPL tak:

user=> (.stop server) 

i

user=> (.start server) 
+0

Dokładnie tego, czego szukałem! –

+0

Otrzymuję ten błąd: 'Nie znaleziono pasującego pola: start dla klasy clojure.lang.PersistentList [Zrzucona klasa java.lang.IllegalArgumentException]'. Jakieś pomysły? – Tyler

+3

Nieważne, problem polegał na tym, że defoncja nie odradzała się - wyobraźcie sobie, że :) – Tyler

1

Dokumentacja Jetty zawiera informacje o graceful shutdown Jetty. To prawdopodobnie za mało informacji, ale może zacząć.

Jeszcze nie zacząłem grać z compojure, ale ogólnie wolę pracować z Tomcat. Jest bardziej w pełni funkcjonalny; między innymi jest dobrze udokumentowany API do uruchamiania i wyłączania go, słucha polecenia zamknięcia na dedykowanym porcie; do wykonania tego są zadania ant, które można oczywiście wywołać także z aplikacji Java. Po prostu nie wiem, co to za magia Compojure robi, łącząc REPL z działającą instancją kontenera WWW i czy/jak automatyczne ponowne ładowanie klasy się dzieje ... mam nadzieję, że ktoś inny będzie mógł dostarczyć więcej informacji.

+0

Cóż, w tym przypadku, nie jestem nawet za pomocą compojure, jestem po prostu za pomocą ring.jetty.adapter zacząć Jetty serwer. Powodem, dla którego idziesz z Jetty, jest to, że nie muszę ciągle rekompilować. –

+1

Wow, Jetty pozwala to zrobić? Chłodny. Będą musieli się o tym dowiedzieć wkrótce. Dzięki! –