web-dev-qa-db-ja.com

ClojureでJettyサーバーを停止するにはどうすればよいですか?

私はringとclojureを使用してWebアプリケーションを作成しています。開発サーバーにはjettyアダプターを使用し、IDEにはemacs/SLIMEを使用しています。 wrap-reloadは役に立ちますが、run-jettyは私のスライムセッションをブロックします。別のターミナルセッションで実行しなくても、自由に開始/停止できるようにしたいと思います。理想的には、サーバーエージェントと、エージェント内のサーバーを起動/停止する関数start-serverおよびstop-serverを定義したいと思います。これは可能ですか?

54
Mad Wombat

私は通常、リングアプリに次のような行があります。

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

これにより、REPLがロックされるのを防ぎます。また、サーバーが再定義されることを心配せずに、このファイルを再コンパイルすることもできます。また、次のようにREPLで対話することもできます:

user=> (.stop server)

そして

user=> (.start server)
103
dnolen

Jettyのドキュメントには、Jettyの graceful shutdown に関する情報が含まれています。それはおそらく十分な情報ではありませんが、それはあなたが始めるかもしれません。

私はまだcompojureで遊んでいませんが、全体的にはTomcatで作業することを好みます。よりフル機能です。特に、起動とシャットダウンのための十分に文書化されたAPIがあり、専用ポートでシャットダウンコマンドをリッスンします。これを行うためのantタスクがあり、もちろんそれらはJavaアプリからも呼び出すことができます。Compojureが接続でどのような魔法を使うのかわかりません。 REPL Webコンテナの実行中のインスタンスへの、そして自動クラスリロードが発生するかどうか/どのように発生するか...うまくいけば、他の誰かがより多くの情報を提供できるでしょう。

1
Carl Smotricz