如何部署 Common Lisp 应用

受够了在服务器上用 Ubuntu,趁中午休息的时候赶紧把博客上的 VPS 从 Ubuntu 切换到 Fedora。然后就是环境和库的安装。

我博客是用 Common Lisp 写的,Common Lisp 运行在一个 image 中,在这个 image 中编写的代码可以当作不断在完善自身。重要的是,修改后的这个 image 可以随时保存起来,并生成一个可执行文件,这个可执行文件就是一个新的 Common Lisp 运行环境。

这就是说,我可以把所有三方库的依赖在我开发环境就加载好,之后保存成一个新的 image,这个 image 既可以直接部署到生产环境,也可以分发给其他开发人员,他们根本不需要再去一个个安装三方库。

首先,我在本地就已经把博客加载到 SBCL 的 image 中:

(ql:quickload "my-blog")

然后,把当前 image 导出成一个独立的可执行文件:

(sb-ext:save-lisp-and-die "my-blog-core" :executable t)

执行之后,SBCL 会在当前目录下生成一个可执行文件 my-blog-core,并退出。

最后把 my-blog-core 这个可执行文件上传到 VPS 里运行就可以了。由于我的是 Web 应用,还需要把数据库文件以及静态模板文件一同上传。

可以看出,我的服务器系统里始终以最小方式运行,既不安装 SBCL,也不安装各种三方库。