gpt4 book ai didi

lisp - 使用 ASDF 启动 Hunchentoot

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:04 27 4
gpt4 key购买 nike

我正在使用 Hunchentoot(在 SBCL 和 Linux 上)开发一个网络应用程序,通常我只是从 Emacs (SLIME) 运行它,但对于部署,我想要更容易自动化的东西。所以我想弄清楚 ASDF,因为这似乎是现在每个人都在使用的东西。

我的应用.asd:

(in-package #:asdf)
(defsystem :myapp
:name "my app"
:depends-on ("hunchentoot")
:components ((:file "package")
(:file "server" :depends-on ("package"))))

package.lisp:

(defpackage myapp
(:use :cl))

服务器.lisp:

(setq hunchentoot:*dispatch-table*
(list (hunchentoot:create-static-file-dispatcher-and-handler "/foo" "foo")))
(hunchentoot:start-server :port 8705)

如果我尝试手动加载它:

$ sbcl
* (require 'asdf)
* (asdf:operate 'asdf:load-op 'myapp)

它加载并编译了一大堆函数,但随后就停止了。 Hunchentoot 未运行,提示不接受输入。我不知道它认为它处于什么状态:打印的最后几行是:

STYLE-WARNING: Implicitly creating new generic function STRINGIFY-COOKIE.
STYLE-WARNING: Implicitly creating new generic function DISPATCH-REQUEST.
STYLE-WARNING: Implicitly creating new generic function WRITE-HEADER-LINE.

有没有办法让它工作? (坦白:我真的一点也不了解 ASDF 或 Common Lisp 包,尽管阅读了很多小时。)

最佳答案

从命令行运行 Lisp 应用程序

许多(不是全部)Lisp 实现支持保存图像(或保存世界或转储)机制,该机制将封装代码体并在启动时运行函数。正如另一位发帖人所说,这些机制是特定于平台和供应商的。

大多数 Lisp 实现(全部?)都有一个命令行界面。因此,部署 Lisp 应用程序的传统方法是在 Lisp 周围包装一个 shell 脚本。该脚本必须设置程序环境并传递命令行参数。通常,运行时上下文包括要加载的应用程序文件(通过 ASD 或 LOAD-FILE)和一个或多个要评估的表单或要运行的函数。

使用/扩展 clbuild

您可以推出自己的脚本,也可以重复使用一些现有技术。看看clbuild这有几个原因很有用。 (有关 clbuild 功能和可移植性的更多信息,请参见下文。)

您可以扩展 clbuild 以使用命令行参数运行您自己的应用程序。例如,要加载“myapps”系统并运行函数“myapp1:start”,您可以按如下方式调用 clbuild:

clbuild run any :myapps "\\(myapp1:start 1 2 3\\)"

注意圆括号的字符转义语法;这是大多数命令解释器所需要的。

另一种方法是从文件重定向标准输入。例如:

clbuild run any :myapps < commands.lisp

clbuild 功能和可移植性

clbuild 最常用于安装和运行开源 CommonLisp 库。

它是一个 bash 脚本,因此具有很高的可移植性。下载工具依赖于 CVS、Subversion、darcs、git 和 Mercurial 等程序。

默认情况下,clbuild 运行 sbcl,但很容易将其配置为运行另一个 Lisp,例如 (无耻插件) Clozure CL (ccl) .将 clbuild.conf.default 复制到 clbuild.conf 并编辑 clbuild.conf 以指向您要使用的 Lisp 可执行文件。

关于lisp - 使用 ASDF 启动 Hunchentoot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com