Как я останавливаю гагатовый сервер в clojure?

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

53
задан semperos 7 March 2011 в 07:58
поделиться

2 ответа

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

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

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

user=> (.stop server)

и

user=> (.start server)
105
ответ дан 7 November 2019 в 08:35
поделиться

В документации Jetty есть некоторая информация о корректном завершении работы Jetty. Возможно, этой информации недостаточно, но она может помочь вам начать.

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

1
ответ дан 7 November 2019 в 08:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: