59

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

4

2 に答える 2

117

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

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

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

user=> (.stop server)

user=> (.start server)
于 2010-04-24T21:31:00.753 に答える
1

Jetty のドキュメントには、Jetty の正常なシャットダウンに関する情報が含まれています。それはおそらく十分な情報ではありませんが、始めるきっかけになるかもしれません。

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

于 2010-04-24T20:57:52.137 に答える