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
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)
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.
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ć. –
Wow, Jetty pozwala to zrobić? Chłodny. Będą musieli się o tym dowiedzieć wkrótce. Dzięki! –
Dokładnie tego, czego szukałem! –
Otrzymuję ten błąd: 'Nie znaleziono pasującego pola: start dla klasy clojure.lang.PersistentList [Zrzucona klasa java.lang.IllegalArgumentException]'. Jakieś pomysły? – Tyler
Nieważne, problem polegał na tym, że defoncja nie odradzała się - wyobraźcie sobie, że :) – Tyler