Кольцо с перезарядкой в 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
переменная для запуска и остановки веб-сервера. На самом деле, идея такая же, как в компонентном подходе, однако вам не нужно ее использовать,