clojure jetty ring

¿Cómo dejo el servidor de embarcadero en clojure?



jetty ring (2)

Estoy escribiendo una aplicación web usando ring y clojure. Estoy usando el adaptador de muelle para el servidor de desarrollo y emacs / SLIME para IDE. Si bien la función de recapitulación ayuda, el run-jetty bloquea mi sesión de limo y me gustaría poder iniciar / detenerlo a voluntad sin tener que ejecutarlo en una sesión de terminal separada. Idealmente, me gustaría definir un agente de servidor y funciones start-server y stop-server que iniciarían / ​​detendrían el servidor dentro del agente. es posible?


La documentación de Jetty contiene información sobre el elegante cierre de Jetty. Probablemente no sea suficiente información, pero puede ayudarlo a comenzar.

Todavía no he empezado a jugar con compojure, pero en general prefiero trabajar con Tomcat. Es más completo; entre otras cosas, hay una API bien documentada para iniciar y cerrar, escucha el comando de apagado en un puerto dedicado; hay tareas ant para hacer esto, y por supuesto también pueden ser llamadas desde una aplicación Java. Simplemente no sé qué clase de magia hace Compojure al conectar el REPL a una instancia en ejecución del contenedor Web, y si / cómo se produce la recarga automática de clases ... con suerte alguien más podrá proporcionar más información.


Normalmente tengo una línea en mi aplicación Ring que se parece a la siguiente:

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

Esto evita bloquear el REPL. También me permite recompilar este archivo sin preocuparme de que mi servidor sea redefinido. También te permite interactuar en el REPL así:

user=> (.stop server)

y

user=> (.start server)