如何在Common Lisp中设置Web服务器?

15

几个月前,我被保罗·格雷厄姆所著的宏伟著作《ANSI Common Lisp》以及他在博客上发表的Lisp可用于Web开发的声明所启发。哇,这太惊人了。这正是我长期以来一直在寻找的东西。作者真正开发了成功的Web应用程序并将其出售给了雅虎。

在那些鼓舞人心的图像的激励下,我决定花费一些时间(1年或2年,谁知道)学习Common Lisp。也许有一天我会开发自己的Web应用程序,并成为一个优秀的Lisp专家。事实上,这是我第二次学习Lisp。第一次是几年前当我着迷于著名的书籍《SICP》,但后来发现Scheme对于现实生活中的应用来说令人难以置信地不成熟。

在阅读了一些《ANSI Common Lisp》的章节之后,我非常确定这是一本充满了对Common Lisp详细探索的好书。然后我开始在Common Lisp中设置Web服务器。毕竟,如果你想学习某些东西,这应该是最好的方式。演示总比定义更好。

正如《Practical Common Lisp》所建议的(顺便说一句,这也是一本好书),我选择在某些Common Lisp实现上安装AllegroServe。然后,从其他地方,我得知Hunchentoot似乎比AllegroServe更好。(我不记得这个词出自何处和谁说的。所以不要和我争论。)

具有讽刺意味的是,你知道吗,我从来没有能够在任何Common Lisp实现上安装这两个软件包。更令人恼火的是,我甚至不知道原因。机器总是吐出大量术语并将我引入混乱之中。我尝试搜索互联网,但没有找到任何有用的信息。

有没有在Linux上成功安装这些软件包的人能告诉我你是如何做到的?你是否遇到了任何问题?你是如何找出问题并解决的?越详细越有帮助。


为什么Scheme对于实际应用来说还不够成熟?它被许多实际应用程序所使用。 - Matt Curtis
谢谢您的回复。Scheme有很多实际应用吗?您能为我列举一些吗? - Serpico
以下是Scheme在现实世界中的一些应用示例:http://en.wikipedia.org/wiki/Scheme_%28programming_language%29#Usage(第一段讨论了学术界,但第二段则是关于“现实世界”的)。 - Dean Harding
https://dev59.com/nXVC5IYBdhLWcg3wcwsm - Matt Curtis
1
如果您不说明尝试了什么或看到了什么,我就不能提供太多帮助,但是我用与在Linux系统上安装所有软件相同的方式来安装这些软件时没有遇到任何问题:sudo apt-get install sbcl hunchentoot cl-aserve - Ken
方案报告本身并不能定义您想要的“现实应用”,例如一个简单的Web服务器。缺失的内容可以在“主要”的可用方案系统中以“非标准”的方式获得。 - p-lo
4个回答

6

你试过这些说明了吗?

我已经有一个可用的SBCL安装,所以我只遵循了说明的后半部分。它设置了一个非常简单的Web应用程序,因此它可以让您看到如何组织自己的Web应用程序。

这些说明可能并不完全符合您想要的 - 它们是用于在Ubuntu上设置与emacs/SLIME远程交互的Web服务器,但我想“远程交互”也可能意味着localhost。


它运行了!!!非常感谢。 对于像我这样的Lisp新手来说,这真的很有帮助。 我会把安装步骤写下来并放在这里。 - Serpico

5
基本上,这些安装步骤来自于这篇文章面向初学者的简单Lisp Webapp,由Frank Shearar推荐(再次感谢)。但我没有按照完全相同的步骤进行,因为(1)我想用本地用户安装Common Lisp;(2)我对作者提到的一些东西不太熟悉。你可以查看原始文章,或者只需跟着我走。我担心我的指示更容易理解。:)
在安装之前需要下载三个软件包。sbcl二进制和源代码软件包可以在这里下载,smanek软件包可以在这里下载。
  • sbcl-1.0.38-x86-linux-binary.tar.bz2

  • sbcl-1.0.38-source.tar.bz2

  • smanek-trivial-lisp-webapp-3681c1

注意:当您看到这篇文章时,版本号可能已经发生了变化。因此不需要获取确切的软件包。但是,这些是适合我的正确软件包。
以下是我所做的操作(用您的真实路径替换YOURPATH,我假设您正在使用BASH):
1. 安装二进制sbcl软件包。
tar jxf sbcl-1.0.38-x86-linux-binary.tar.bz2

cd sbcl-1.0.38-x86-linux

INSTALL_ROOT=YOURPATH sh install.sh

cd ..

现在已经安装了二进制的sbcl包。当安装程序抱怨“找不到手册”之类的东西时,没关系,因为手册内容不包含在二进制包中。让它保持原样。
2. 设置路径和SBCL_HOME。
export PATH=YOURPATH/bin/:$PATH

export SBCL_HOME=YOURPATH/lib/sbcl/

3. 安装源代码的sbcl软件包

tar jxf sbcl-1.0.38-source.tar.bz2

cd sbcl-1.0.38

sh make.sh

export SBCL_HOME=''

INSTALL_ROOT=YOUROTHTERPATH sh install.sh

cd ..

注意: 您可能需要指定其他目录进行安装,否则它将被安装到二进制sbcl所在的相同目录中。
4. 设置PATH和SBCL_HOME。
export PATH=YOUROTHERPATH/bin/:$PATH

export SBCL_HOME=YOUROTHERPATH/lib/sbcl/

5. 安装smanek包

unzip smanek-trivial-lisp-webapp-36816c1.zip

cd smanek-trival-lisp-webapp-36816c1

cd scripts

./startserver.sh

当它说“Web服务器在端口8080上启动”时,您可以在Web浏览器中访问“http://localhost:8080”。它就在那里,对吧?
6. 一些注释
- 在将三个软件包放入一个目录后,您可以逐个或批量运行上述脚本。记得用您的真实路径替换路径。 - 我怀疑Shaneal Manek已经大量黑客攻击了asdf和hunchentoot软件包,因为我在$HOME/.sbclrc和$HOME/.sbcl中没有找到任何东西。谢谢Shaneal Manek,你帮助了很多人。 - 我仍然对那些总是说很多但做很少的人感到憎恨。即使人们生气了,显然重要的是他们说什么,而不是他们如何说。尽管如此,在情绪不好的时候说些不好的话是我的错误。

+1 如果您告诉我们如何使事情工作起来。谢谢! - Frank Shearar

2

五年后。

使用quicklisp非常容易。我假设您已经安装了SBCL或其他CL实现。

  1. 进入REPL并评估

(ql:quickload :aserve)

  1. 启动AllegroServe

(net.aserve:start :port 8000)

  1. 发布一些HTML文件

(net.aserve:publish-file :path "/" :file "~/hello.html")

  1. 转到http://localhost:8000/

快乐编程!

阅读更多关于AllegroServe教程介绍


0

保罗·格雷厄姆(Paul Graham)是个好的起点 :-)

我也发现Common Lisp很难在第一步就过关。当你刚开始时,环境很糟糕,没有明确的一条正确的路径来让你达到能够输入一些代码并看到一些结果的地步(例如Python)。像你一样,我浪费了很多时间跳来跳去不同的实现。所以我的建议是:

我建议你只选择一个实现,并忽略所有其他建议,直到你把它搞定为止。

如果你没心情,就用Apache写一些PHP吧 :-)


顺便说一下,我的回答相当简短——抱歉语气有些生硬,但你的问题非常激进。 - Matt Curtis
@Matt -1 因为两个错误不会让事情变得正确。(我还稍微编辑了一下,让提问者看起来更友善一些) - Earlz
@Earlz:好的,我稍微礼貌了一些,并加入了一些善意的建议。 - Matt Curtis
1
让他看起来更好并不能让他变得更好。他是你的姐妹吗? - d-_-b
我为刚才说的激烈言辞道歉。实际上,情绪不好时说话或写作是不好的。还要感谢你,Earlz。 - Serpico
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接