Как мне остановить джет сервер в ближайшем будущем?

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

3 ответа

Решение

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

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

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

user=> (.stop server)

а также

user=> (.start server)

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

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

12 лет спустя.

VSCode/Кальва:

Если вы, как и я, запускаете пристань из repl внутри VSCode / Calva, вам нужно нажать CTRL-C для серверного процесса на терминале, а не для REPL.

На самом деле серверный процесс привязан к терминалу, а не к REPL.

Другие вопросы по тегам