5

我有兴趣了解人们如何在生产环境中进行 Lisp webapp 部署和更新(尤其是更新)。

在 Ruby 中,包括我自己在内的许多人都使用 Capistrano 进行部署。它提供了一些很好的间接性和远程执行命令的能力,最重要的是(在我看来)回滚到工作代码库的能力。

我知道长期运行的 Lisp 进程通过 SSH 隧道通过 Swank 连接并就地修改的想法是一个流行的想法,但我没有喝过 Koolaid,主要是因为更新有状态的问题进程(如果出现问题,这似乎是在自找麻烦——比如内存中的当前状态与即将在内存中的新对象定义之间的不可预见的阻抗不匹配)。

鉴于您可以使用 hunchentoot 创建几乎无状态(或完全)的 web 应用程序(或在此处插入您最喜欢的 Lisp 应用程序服务器),如果 Lisp 进程(es ) 隐藏在其上游通道中的 nginx 后面,如果您可以正确编排取消 hunchentoot 进程并在更新代码后将它们重新启动,例如,将它们一直恢复,同时让至少一个 hunchentoot 进程在集群中运行任何给定的时刻(可以使用 CGI 或 mod_lisp,但我对这种方法并不特别感兴趣 - 虽然如果你真的喜欢这种方法,请至少说一下,我想学习)。例如,使用Passenger(将橙子与苹果进行比较,因为它按需启动流程),

好吧,这有点漫无边际,实际上我将尝试所有这些,但我想从其他人那里获得一些关于这些想法的反馈。也许你有更好的主意。

谢谢

4

1 回答 1

1

您可以通过为智能前端/负载平衡器(如 HAProxy)编写 capistrano 脚本来完成无中断(零停机)部署,该脚本将应用程序服务器拉出轮换状态,使用新部署的代码重新启动它们,然后将它们重新组合起来。

通过在您的应用服务器在生产中停止实时轮换时增量滚动您的应用服务器,您可以实现顺利部署。

这并没有涉及具有特定状态的持久应用程序服务器循环,由于您提到的原因,这似乎很可怕。REPL 非常适合调试和调整,但您在磁盘上运行代码的直觉似乎是有根据的。

于 2011-02-28T20:42:32.993 回答