私はringとclojureを使用してWebアプリケーションを作成しています。開発サーバーにはjettyアダプターを使用し、IDEにはemacs/SLIMEを使用しています。 wrap-reloadは役に立ちますが、run-jettyは私のスライムセッションをブロックします。別のターミナルセッションで実行しなくても、自由に開始/停止できるようにしたいと思います。理想的には、サーバーエージェントと、エージェント内のサーバーを起動/停止する関数start-serverおよびstop-serverを定義したいと思います。これは可能ですか?
私は通常、リングアプリに次のような行があります。
(defonce server (run-jetty #'my-app {:port 8080 :join? false}))
これにより、REPLがロックされるのを防ぎます。また、サーバーが再定義されることを心配せずに、このファイルを再コンパイルすることもできます。また、次のようにREPLで対話することもできます:
user=> (.stop server)
そして
user=> (.start server)
Jettyのドキュメントには、Jettyの graceful shutdown に関する情報が含まれています。それはおそらく十分な情報ではありませんが、それはあなたが始めるかもしれません。
私はまだcompojureで遊んでいませんが、全体的にはTomcatで作業することを好みます。よりフル機能です。特に、起動とシャットダウンのための十分に文書化されたAPIがあり、専用ポートでシャットダウンコマンドをリッスンします。これを行うためのant
タスクがあり、もちろんそれらはJavaアプリからも呼び出すことができます。Compojureが接続でどのような魔法を使うのかわかりません。 REPL Webコンテナの実行中のインスタンスへの、そして自動クラスリロードが発生するかどうか/どのように発生するか...うまくいけば、他の誰かがより多くの情報を提供できるでしょう。