SBCL:将 Hunchentoot 应用程序部署为可执行文件
SBCL: Deploying Hunchentoot application as executable
我开始玩 SBCL Common Lisp,想使用 Hunchentoot 开发一个小型 Web 应用程序。为了便于部署,我计划使用 sb-ext:save-lisp-and-die 将所有内容保存在二进制文件中,因为我可以忍受大输出大小。
对于可执行文件,您需要提供顶层函数。问题是程序在顶层函数returns时退出。我试图从可执行文件启动 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到终端,进入调试器。
;;; I simply use sleep to yield the main thread.
;;; To start the server while developing I use
;;; start-server. For deployment I use the main
;;; function.
(defun start-server ()
(hunchentoot:start
(make-instance 'hunchentoot:easy-acceptor :port 8000)))
(defun main()
(start-server)
(sleep #xffffffff))
我开始玩 SBCL Common Lisp,想使用 Hunchentoot 开发一个小型 Web 应用程序。为了便于部署,我计划使用 sb-ext:save-lisp-and-die 将所有内容保存在二进制文件中,因为我可以忍受大输出大小。
对于可执行文件,您需要提供顶层函数。问题是程序在顶层函数returns时退出。我试图从可执行文件启动 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到终端,进入调试器。
;;; I simply use sleep to yield the main thread.
;;; To start the server while developing I use
;;; start-server. For deployment I use the main
;;; function.
(defun start-server ()
(hunchentoot:start
(make-instance 'hunchentoot:easy-acceptor :port 8000)))
(defun main()
(start-server)
(sleep #xffffffff))