Кольцо с перезарядкой в ​​Emacs Cider REPL

При запуске сервера Ring из REPL Emacs Cider через reload-wrap REPL блокируется. Что я могу сделать, чтобы иметь возможность перезагружать код во время разработки и продолжать работать с Cider REPL одновременно.

Кроме того, после отмены запущенного "процесса" сервера из REPL нажатием Cc CC, я не могу перезапустить его на том же порту, я получаю ошибку "адрес уже используется".

Я знаю, что это возможно с системой компонентов Стюарта Сьерры. Это единственный путь или есть более простое решение?

2 ответа

Когда вы запускаете свой кольцевой сервер (я полагаю, используя jetty), вы не говорите ему не присоединять текущий поток к работающему серверу. Вам нужно добавить join? опция установлена ​​в false:

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

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

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

Остановка сервера закроет сокет сервера и сделает его доступным для будущих экземпляров сервера.

Более простое решение - хранить веб-сервер так же, как компонент где-то в dev/user.clj. И настроить cider-refresh-fn переменная для запуска и остановки веб-сервера. На самом деле, идея такая же, как в компонентном подходе, однако вам не нужно ее использовать,

Другие вопросы по тегам