¿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)