Я пишу веб-приложение с помощью кольца и clojure. Я использую гагатовый адаптер для сервера разработки и emacs/SLIME для IDE. В то время как переносить-перезагрузка действительно помогает, причал выполнения блокирует мою сессию слизи, и я хотел бы смочь запустить/остановить его по желанию, не имея необходимость выполнять его на отдельном терминальном сеансе. Идеально, я хотел бы определить агент сервера и начинать-сервер функций и сервер остановки, который запустит/остановит сервер в агенте. Действительно ли это возможно?
У меня обычно есть строка в моем приложении Ring, которая выглядит следующим образом:
(defonce server (run-jetty #'my-app {:port 8080 :join? false}))
Это предотвращает блокировку REPL . Это также позволяет мне перекомпилировать этот файл, не беспокоясь о том, что мой сервер будет переопределен. Он также позволяет вам взаимодействовать с REPL следующим образом:
user=> (.stop server)
и
user=> (.start server)
В документации Jetty есть некоторая информация о корректном завершении работы Jetty. Возможно, этой информации недостаточно, но она может помочь вам начать.
Я еще не начал играть с самообладанием, но в целом я предпочитаю работать с Tomcat. Он более полнофункциональный; среди прочего, имеется хорошо документированный API для его запуска и выключения, он прослушивает команду выключения на выделенном порту; для этого есть и
задачи, и они, конечно, также могут быть вызваны из приложения Java. Я просто не знаю, какую магию делает Compojure с подключением REPL к работающему экземпляру веб-контейнера, и если / как происходит автоматическая перезагрузка класса ... надеюсь, кто-то другой сможет предоставить дополнительную информацию.