2

reload-wrap を介して Emacs Cider REPL 内から Ring サーバーを起動すると、REPL がブロックされます。開発中にこのコード再読み込み機能を持ち、同時に Cider REPL で作業を続けることができるようにするにはどうすればよいですか?

さらに、Cc CC を押して REPL 内から実行中のサーバー「プロセス」をキャンセルした後、同じポートで再起動できず、「アドレスは既に使用されています」というエラーが表示されます。

これが Stuart Sierra のコンポーネント システムで可能であることはわかっています。これが唯一の方法ですか、それとももっと簡単な解決策がありますか?

4

2 に答える 2

3

リングサーバーを起動するとき(私はjettyを使用していると思います)、現在のスレッドを実行中のサーバーに参加させないように指示していません。join?次のオプション セットを追加する必要がありfalseます。

(run-jetty my-handler {:join? false})

サーバーインスタンスであるこの式の戻り値もバインドする必要があるため、後で停止できます。

(def my-server (run-jetty my-handler {:join? false}))
;; some time later
(.stop my-server)

サーバーを停止すると、サーバー ソケットが閉じられ、将来のサーバー インスタンスで使用できるようになります。

于 2016-03-29T11:58:08.410 に答える
2

コンポーネントがdev/user.cljのどこかにあるのと同じように、Webサーバーを格納するためのより単純なソリューション。そしてcider-refresh-fn変数を構成して、Web サーバーを開始および停止します。実はコンポーネントアプローチと考え方は同じですが、使わなくてもいいので、

于 2016-04-13T21:46:01.160 に答える