您在 Snap 中以稳定的方式部署用于生产的 Haskell 代码有何经验?
如果服务器上的编译失败,那么我想中止部署,如果成功,那么我希望它关闭 snap-server 并启动新版本。
我知道有很多方法。从 rsync 到 git-hooks 的一切(git pull 是一场噩梦)。但我想听听你的经历。
您在 Snap 中以稳定的方式部署用于生产的 Haskell 代码有何经验?
如果服务器上的编译失败,那么我想中止部署,如果成功,那么我希望它关闭 snap-server 并启动新版本。
我知道有很多方法。从 rsync 到 git-hooks 的一切(git pull 是一场噩梦)。但我想听听你的经历。
在我工作的地方,我们使用 Happstack 并部署在 Ubuntu linux 上。我们实际上对 Web 应用程序和所有依赖项进行了 debianize,然后在自动构建器中构建它们。
要实际安装在服务器上,我们只需运行apt-get update && apt-get install webapp-production
该系统的优势在于它使所有开发人员都可以轻松地针对相同版本的依赖项进行开发。而且您知道所有源代码都已正确签入并且可以在任何地方重新构建......而不仅仅是在一台特定的机器上。此外,它提供了一种机制,可以在需要时从 hackage 中对库进行修补。
缺点是 apt-get 和 cabal-install 相处得不好。您要么必须通过 apt-get 构建所有内容,要么通过 cabal-install 完成所有内容。
这就是我们所做的。首先,我们的服务器和我们的开发机器都是相同版本的 ubuntu。我们在我们喜欢使用的任何操作系统中编写代码、测试等,当我们准备好推送时,我们会在开发机器上构建。只要编译干净,我们就停止(前端服务器数量)/2,rsyncresources
目录和二进制文件的新副本,然后使用脚本启动它。然后重复另一半。
在我看来,当您可以轻松传输二进制和静态资产时,我认为您应该质疑在前端服务器上维护完整工具链的逻辑——前提是外部库(数据库、图像等)版本与构建环境。哎呀,只要操作系统和库的版本匹配,您就可以再次使用 virtualbox 实例进行最终编译。