我正在开发一个使用Hunchentoot的web应用(在SBCL和Linux上),通常我只是在Emacs (SLIME)上运行它,但对于部署,我想要一些更容易自动化的东西。所以我正在尝试弄清楚ASDF,因为现在似乎每个人都在使用ASDF。
myapp.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))server.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包,尽管我读了很多小时。)
发布于 2009-03-31 19:38:06
从命令行运行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.lispclbuild功能和可移植性
clbuild最常用于安装和运行开源CommonLisp库。
它是一个bash脚本,所以它具有很高的可移植性。下载工具依赖于CVS、Subversion、darcs、git和Mercurial等程序。
默认情况下,clbuild运行sbcl,但是很容易将其配置为运行另一个Lisp,例如(无耻的插头) Clozure CL (ccl)。将clbuild.conf.default复制到clbuild.conf并编辑clbuild.conf,使其指向您想要使用的Lisp可执行文件。
发布于 2009-03-22 10:10:41
您的示例适用于我,至少修改后可以与当前的Hunchentoot1.0.0一起使用,但这只是将(hunchentoot:start-server :port 8705)更改为(hunchentoot:start (make-instance 'hunchentoot:acceptor :port 8705))。
在任何情况下,在可能的情况下,您都不应该从ASDF加载的内部文件中运行内容。它的作用类似于构建系统,我不认为让make启动don服务器是很常见的……
有关部署,请参阅cl-launch、sbcl command-line options,特别是--eval或saving an image。
发布于 2009-03-22 11:11:43
我要做的是创建一个文件,该文件为我的web应用程序加载ASDF系统定义,然后启动Hunchentoot,并按预期进行所有设置。然后使用sbcl --load start-stuff运行此命令。
https://stackoverflow.com/questions/669976
复制相似问题