Common lisp SBCL:将Hunchentoot应用程序部署为可执行文件

Common lisp SBCL:将Hunchentoot应用程序部署为可执行文件,common-lisp,executable,sbcl,hunchentoot,Common Lisp,Executable,Sbcl,Hunchentoot,我开始使用SBCL Common Lisp,并希望使用Hunchentoot开发一个小型web应用程序。为了便于部署,我计划使用sb-ext:save-lisp和die将所有内容保存在二进制文件中,因为我可以适应较大的输出大小 对于可执行文件,需要提供顶级函数。问题是当toplevel函数返回时程序退出。我试图从可执行文件启动Hunchentoot,但程序在两秒钟后结束 在停止程序之前,如何等待Hunchentoot(从请求内部)关闭?我可以做一些类似加入Hunchentoot接受线程的事情吗?

我开始使用SBCL Common Lisp,并希望使用Hunchentoot开发一个小型web应用程序。为了便于部署,我计划使用sb-ext:save-lisp和die将所有内容保存在二进制文件中,因为我可以适应较大的输出大小

对于可执行文件,需要提供顶级函数。问题是当toplevel函数返回时程序退出。我试图从可执行文件启动Hunchentoot,但程序在两秒钟后结束

在停止程序之前,如何等待Hunchentoot(从请求内部)关闭?我可以做一些类似加入Hunchentoot接受线程的事情吗?或者我甚至可以将REPL包含到可执行文件中,以便能够进行实时调试

(ql:quickload :hunchentoot)
(use-package :hunchentoot)

(defun main ()
  (hunchentoot:start-server :port 8082)
  (sb-thread:join-thread (find-if
                          (lambda (th)
                            (string= (sb-thread:thread-name th) "hunchentoot-listener-1"))
                          (sb-thread:list-all-threads))))

如果您保持终端打开(可能通过GNU屏幕),则无需显式代码即可访问REPL。将Ctrl+C发送到终端以进入调试器。

我似乎正在使用更新版本的Hunchentoot。我不得不使用(hunchentoot:start(生成实例'hunchentoot:easy acceptor:port 8080),线程名为“hunchentoot listener-*:8080”。工作起来很有魅力。如何
(查找if(lambda(th)(搜索“hunchentoot listener”(sb线程:线程名称th))(sb线程:列出所有线程))
对于
查找是否
部分,你有没有想过如何部署你的应用程序?我现在处于相同的位置。我写了一个快速的应用程序,并想部署它。你使用了什么工具?@MadPhysicast我正在做笔记。只是不能确定,因为我因为sbcl错误而无法运行我的应用程序。@Ehvince太好了!我会保留我的e是的。顺便说一句,我很想得到一份你在Lisp之旅中发现有用的Lisp资源列表。对书籍、在线文章等的建议。我发现真正有用的资源基本上都在好资源选项卡中,E.Weitz的+CL Recipes中(强烈建议对实际情况有一个全面的了解。尽管缺乏现代工具和图书馆)+阅读资料。