Общий Lisp: Hunchentoot и REPL - Когда я запускаю сервер, я получаю выход журнала в REPL и больше не могу использовать REPL - программирование

Общий Lisp: Hunchentoot и REPL - Когда я запускаю сервер, я получаю выход журнала в REPL и больше не могу использовать REPL

Как и некоторые из адептов здесь, я новичок в Lisp. Я прохожу через Практическая общая Lisp книга, но обошла стороной, чтобы понять, насколько легко было бы создать веб-приложение, поэтому я следил за этим учебником, а также обновленная версия здесь.

Когда я доберусь до точки, где я запускаю сервер, мой REPL умирает, и я не могу тогда что-то нажать на *dispatch-table*.

В основном, у меня есть код, отлично работающий в REPL, добавление объектов в список, извлечение их и т.д., затем я запускаю сервер, используя

(setf *web-server* (start (make-instance 'hunchentoot:acceptor :port 8080)))

который отлично работает, и я могу получить к нему доступ на http://localhost:8080. Однако, когда я обращаюсь к нему, журналы печатаются в REPL, и я не могу с этого момента использовать REPL. Так, например, после сообщения Адама Петерсена, я не могу тогда

(push (create-prefix-dispatcher "/retro-games.htm" 'retro-games) *dispatch-table*)

потому что REPL не отвечает. Я попытался запустить сервер из разных окон (т.е. Из SBCL в терминале), но затем он не знает о том, в каком контексте я вхожу - он не понимает, какой пакет я работаю, или какой-либо из моего кода.

Я использую слегка нестандартную настройку; Я на OSX и использую Sublime Text 2 с SublimeREPL и SBCL (потому что я действительно не в Emacs, а ST2 отлично!). Я описал, как я собрал все это здесь - но я действительно только публиковал это на всякий случай, я был бы удивлен, если это моя установка, вызывающая проблемы, в отличие от некоторых основных вещей, которые мне не хватает.

В любом случае, я понимаю, что я мог бы пойти дальше и настроить hunchentoot в более производственной среде и увидеть некоторые сообщения, подробно описывающие это и доступ к REPL удаленно, но я надеялся, что будет что-то более простое, что я только что пропустил.

4b9b3361

Ответ 1

Убедитесь, что ваш SBCL был скомпилирован с поддержкой потоков. При запуске однопоточной цикл обработки запросов Hunchentoot не возвращается к REPL.

Threading не является настройкой по умолчанию в двоичных файлах из http://www.sbcl.org/ для Mac OS X. В Mac OS X я обычно загружаю двоичные файлы sbcl.org, чтобы получить, затем загрузите источники и перестройте с помощью ./make.sh --fancy, чтобы получить несколько причудливых функций, включая потоки. Подробнее см. Документ INSTALL в источниках.