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

Как и некоторые из тех, кто задает вопрос, я новичок в Lisp. Я просматривал книгу Практический Common 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, но я надеялся, что будет что-то более простое, чтобы возиться с этим, я ' я только что пропустил.


person mkornblum    schedule 11.07.2013    source источник


Ответы (1)


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

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

person Xach    schedule 11.07.2013
comment
Спасибо, Xach - я попробую и расскажу, как у меня дела :) - person mkornblum; 11.07.2013
comment
Потрясающе, работало удовольствие. Это было сложно сделать, потому что я не зарегистрировал, что мне понадобится один SBCL для кросс-компиляции другого, а затем не запустил установщик после компилятора и не понимал, в какой версии я был и т. Д., Но я наконец разобрался. Большое спасибо! - person mkornblum; 15.07.2013
comment
Итак, как можно использовать многопоточную версию в подобной ситуации? - person MadPhysicist; 08.01.2018