2010-04-24 1 views
52

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

ответ

97

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

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

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

user=> (.stop server) 

и

user=> (.start server) 
+0

Именно то, что я искал! –

+0

Я получаю эту ошибку: 'Не найдено совпадающего поля: start для класса clojure.lang.PersistentList [Thrown class java.lang.IllegalArgumentException]'. Есть идеи? – Tyler

+3

Ничего, проблема в том, что дефенс не переизбирался - представьте, что :) – Tyler

1

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

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

+0

Ну, в данном случае, я даже не используя compojure, я просто с помощью ring.jetty.adapter начать Jetty сервер. Причиной идти с Jetty является то, что мне не нужно перекомпилировать все время. –

+1

Wow, Jetty позволяет это сделать? Круто. Надо будет узнать об этом в скором времени. Благодаря! –