2010-04-24 5 views
52

나는 링과 클로저를 사용하는 웹 애플리케이션을 작성 중이다. 나는 IDE를 위해 개발 서버와 emacs/SLIME을 위해 부두 용 어댑터를 사용하고있다. wrap-reload가 도움이되지만, run-jetty는 슬라임 세션을 차단하므로 별도의 터미널 세션에서 실행하지 않고도 시작/중지 할 수 있습니다. 이상적으로는 에이전트 내에서 서버를 시작/중지하는 서버 에이전트와 함수 start-server 및 stop-server를 정의하고 싶습니다. 이것이 가능한가?클로우 저에서 부두 서버를 어떻게 중지하나요?

답변

97

나는 일반적으로 다음과 같은 내 링 응용 프로그램에서 선이있다. 또한 서버를 재정의 할 걱정없이이 파일을 다시 컴파일 할 수 있습니다.

user=> (.stop server) 

user=> (.start server) 
+0

정확히 내가 무엇을 찾고 있었습니까! –

+0

이 오류가 발생합니다 :'일치하는 필드가 없습니다 : 클래스 clojure.lang.PersistentList에 대해 시작하십시오 [Thrown class java.lang.IllegalArgumentException]'. 어떤 아이디어? – Tyler

+3

신경 쓰지 마라, 문제는 defonce가 re-defing하지 않고 있었다라는 것이다 - 그것을 상상해라 :) – Tyler

1

제티 설명서에는 제티의 graceful shutdown에 대한 정보가 있습니다. 아마 정보가 충분하지 않지만 시작될 수 있습니다.

아직 컴 포주로 게임을 시작하지 않았지만 전반적으로 나는 톰캣으로 작업하는 것을 선호합니다. 더 많은 기능을 갖추고 있습니다. 무엇보다도, 그것을 시작하고 종료하기위한 잘 문서화 된 API가 있습니다. 전용 포트에서 shutdown 명령을 수신합니다. 이 작업을 수행하는 데는 ant 개의 작업이 있으며 Java 응용 프로그램에서도 호출 할 수 있습니다. Compojure가 웹 컨테이너의 실행중인 인스턴스에 REPL을 연결하는 것과 어떤 종류의 마법을하는지, 그리고 자동 클래스 재로드가 발생하는 경우 ... 다른 사람이 더 많은 정보를 제공 할 수 있기를 바랍니다. 이것은 REPL을 잠금 방지

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

:

+0

음,이 경우에, 심지어 compojure를 사용하지 않을거야, 난 그냥 ring.jetty.adapter를 사용하고하는 시작하는 부두 : 그것은 또한 당신이 그렇게 같이 REPL에서 상호 작용할 수 있습니다 섬기는 사람. Jetty와 함께가는 이유는 항상 다시 컴파일 할 필요가 없기 때문입니다. –

+1

와우, 부두에서 그렇게 할 수 있습니까? 시원한. 곧 그 사실에 대해 배워야 할 것입니다. 감사! –