14

像这里的一些提问者一样,我是 Lisp 的新手。我正在阅读Practical Common Lisp这本书,但我暂时避开了设置 Web 应用程序的难度,因此我一直在关注教程以及此处的更新版本

当我启动服务器时,我的 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 上并使用带有 SublimeREPL 和 SBCL 的 Sublime Text 2(因为我真的不喜欢 Emacs 而 ST2 很棒!)。我已经描述了我如何将它们放在一起- 但我真的只是为了以防万一,如果这是我的设置导致问题而不是我缺少的一些基本内容,我会感到惊讶。

无论如何,我知道我可以继续在一个更像生产的环境中设置 hunchentoot,并且已经看到一些详细说明并远程访问 REPL 的帖子,但我希望有一些更简单的东西来解决我的问题我只是错过了。

4

1 回答 1

22

确保您的 SBCL 是使用线程支持编译的。运行单线程时,Hunchentoot 请求处理循环不会返回到 REPL。

线程不是来自http://www.sbcl.org/的 Mac OS X 二进制文件中的默认设置。在 Mac OS X 上,我通常下载 sbcl.org 二进制文件以开始,然后下载源代码并./make.sh --fancy重建获得许多花哨的功能,包括线程。有关详细信息,请参阅源中的 INSTALL 文档。

于 2013-07-11T14:50:39.433 回答