Как остановить jetty server в clojure?


Я пишу веб-приложение с помощью ring и clojure. Я использую адаптер jetty для сервера разработки и emacs/SLIME для IDE. В то время как wrap-reload помогает, run-jetty блокирует мой сеанс slime, и я хотел бы иметь возможность запускать/останавливать его по желанию без необходимости запускать его в отдельном терминальном сеансе. В идеале, я хотел бы определить агента и функции запустить сервер-сервер и сервер, что бы запустить/остановить сервер внутри агента. Это возможно?

2 52

2 ответа:

обычно у меня есть строка в моем кольцевом приложении, которая выглядит следующим образом:

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

это предотвращает блокировку REPL. Это также позволяет мне перекомпилировать этот файл, не беспокоясь, что мой сервер будет переопределено. Он также позволяет вам взаимодействовать с REPL следующим образом:

user=> (.stop server)

и

user=> (.start server)

в документации по причалу есть некоторая информация о безопасное отключение Пристань. Это, вероятно, не достаточно информации, но это может помочь вам начать.

Я еще не начал играть с compojure, но в целом я предпочитаю работать с Tomcat. Это более полнофункциональный; среди прочего, есть хорошо документированный API для запуска и выключения его, он слушает команду shutdown на выделенном порту; есть ant задачи, чтобы сделать это, и они конечно, можно вызвать и из Java-приложения. Я просто не знаю, какой волшебный Compojure делает с подключением REPL к запущенному экземпляру веб-контейнера, и если/как происходит автоматическая перезагрузка класса... надеюсь, кто-то еще сможет предоставить больше информации.