Рассмотрите следующий сценарий:
Минимальная загрузочная задача запускает http-сервер:
(boot (serve :handler 'myapp.server/handler
:port 3000))
(Его можно запустить несколькими способами, здесь можно просто запустить его из сеанса nrepl, например запустить boot repl
из терминала)
Обработчик представлен функцией handler
внутри пространства имен myapp.server
. Соответствующий файл выглядит так:
(ns myapp.server (:require ...))
(defonce server-state (atom {:nr 0}))
(defn handler [req]
(prn (swap! server-state update :nr inc))
{:body "Answer.\n"})
Это работает, каждый раз, когда посещается адрес localhost: 3000, атом обновляется, и новая версия выводится на стандартный вывод внутри repl.
Как атом может быть проверен в любое время?
boot.user=> @myapp.server/server-state
выдает ошибку. (...no such var...)
При попытке сделать то же самое из соединения emacs cider nrepl эта предыдущая попытка всегда показывает начальное значение атома: {:n 0}
ОБНОВЛЕНИЕ
Вот точные шаги, которые я делаю при использовании emacs/cider:
cd
каталог проекта- начать
emacs
cider-jack-in
(boot (dev))
Ctrl+C+C
(чтобы снова получить подсказку.)- Затем регистрируется тестирование с
curl
: получение ответов + внутри обновленного атома emacs:{:n 1}
..{:n 2}
.. - Затем, в ответ:
(require 'myapp.server)
, занимает некоторое время:nil
. - наконец:
@myapp.server/state
--> однако:{:n 0}