【问题标题】:Deploy Haskell code that uses the Snap Framework部署使用 Snap 框架的 Haskell 代码
【发布时间】:2011-09-24 13:53:58
【问题描述】:

您在 Snap 中以稳定的方式部署 Haskell 代码以进行生产有什么经验?

如果服务器上的编译失败,那么我想中止部署,如果成功,那么我希望它关闭 snap-server 并启动新版本。

我知道有很多方法。从 rsync 到 git-hooks 的一切(git pull 是一场噩梦)。但我想听听你的经历。

【问题讨论】:

  • 这里通常不鼓励要求类似列表的答案的广泛问题。专注于一个框架并添加更多关于您对平台、扩展等方面的要求的信息会更具建设性。
  • @hammar 编辑过时的答案,不过。

标签: haskell capistrano web-deployment githooks haskell-snap-framework


【解决方案1】:

在我工作的地方,我们使用 Happstack 并部署在 Ubuntu linux 上。我们实际上对 Web 应用程序和所有依赖项进行了 debianize,然后在自动构建器中构建它们。

要实际安装在服务器上,我们只需运行apt-get update && apt-get install webapp-production

该系统的优势在于它使所有开发人员都可以轻松地针对相同版本的依赖项进行开发。而且您知道所有源代码都已正确签入并且可以在任何地方重新构建......而不仅仅是在一台特定的机器上。此外,它还提供了一种机制,可以在需要时从 hackage 中对库进行修补。

缺点是 apt-get 和 cabal-install 不能很好相处。您要么必须通过 apt-get 构建所有内容,要么通过 cabal-install 完成所有内容。

【讨论】:

  • 我目前正在使用 Happstack(最好的文档和稳定的)。但是主页上没有新闻让我害怕。
  • @Daniel W -- 如果您关注 repo,您​​会看到 Happstack 仍在积极维护和开发中。 Hackages 上关于 happstack-server 等软件包的上传历史揭示了同样的事情。 Happstack 只是在所有框架中投入最少的精力用于推广,而且工作通常比“性感”更具增量性。
  • 呃。对于那个很抱歉。我将进行一些更改,以便有更多关于当前开发的持续更新。
  • 你如何“debianize web 应用程序和所有依赖项,并在 autobuilder 中构建它们”?对不起,但我是 linux 的新手,对我来说这听起来像:abstrusegoose.com/474
【解决方案2】:

这就是我们所做的。首先,我们的服务器和我们的开发机器都是相同版本的 ubuntu。我们在我们喜欢使用的任何操作系统中编写代码、测试等,当我们准备好推送时,我们会在开发机器上构建。只要编译干净,我们就停止 (number of frontend servers)/2,rsync resources 目录和二进制文件的新副本,然后使用脚本启动它。然后重复另一半。

在我看来,当您可以轻松传输二进制和静态资产时,我认为您应该质疑在前端服务器上维护完整工具链的逻辑——前提是外部库(数据库、图像等)版本与构建环境匹配。哎呀,只要操作系统和库的版本匹配,您就可以再次使用 virtualbox 实例进行最终编译。

【讨论】:

  • 这是我通常采用的方法。有时我用 git 部署我的二进制+静态文件。是的,git repo 很大,因为它有二进制文件,但这使得在出现问题时恢复到最后的良好设置变得微不足道。我通常也从一个被 while(1) 语句包围的 shell 脚本中运行我的应用程序。这样,如果它以任何方式崩溃,它都会自动重新启动。这也允许您使用简单的“git pull”和 SIGHUP 切换到正在运行的二进制文件的新版本。
  • 您能描述一下启动时需要什么样的脚本,比如 Snap 或 happstack webapp?我有我的快照应用程序在我的本地机器上运行,但我完全不知道如何在生产服务器上启动它?如果您有空闲时间,我还发布了一个关于此的问题:stackoverflow.com/questions/11214167/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2023-03-05
  • 2011-06-14
相关资源
最近更新 更多