2011-09-24 88 views
2

您以稳定的方式在Snap中为生产部署Haskell代码有什么经验?部署使用Snap Framework的Haskell代码

如果在服务器上编译失败,那么我想中止部署,如果成功了,那么我希望它转动快照服务器并启动新版本。

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

+0

在这里通常不鼓励广泛的问题寻求列表式的答案。将注意力集中在一个框架上,并添加更多关于平台,缩放等方面的要求的更多信息。 – hammar

+0

@hammar编辑obseleted答案,但。 – alternative

回答

4

我在哪里工作,我们使用Happstack并在Ubuntu linux上部署。实际上,我们将Web应用程序和所有依赖关系进行debian化,然后在自动构建器中构建它们。

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

该系统的优点是,它很容易让所有的开发人员开发针对相同版本的依赖。而且您知道所有源代码都已正确检入,并且可以在任何地方重建......而不仅仅是在一台特定的机器上。此外,它还提供了一种机制,可以在需要时从hackage制作补丁库。

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

+0

我目前正在使用Happstack(最佳文档和稳定版)。但主页上缺乏新闻让我感到害怕。 –

+1

@Daniel W - 如果您遵循回购协议,您会发现Happstack仍处于积极维护和发展阶段。 Hackages上的“happstack-server”等软件包的上传历史记录显示了同样的情况。 Happstack只是在所有框架中投入最少的精力进行推广,而且这项工作通常比“性感”更加增量。 – sclv

+0

Eek。对于那个很抱歉。我会做出一些改变,以便对当前的发展有更多的持续更新。 – stepcut

3

以下是我们的工作。首先,我们的服务器都是同一版本的ubuntu以及我们的开发机器。我们在任何我们喜欢使用的操作系统中编写代码,测试等,当我们准备推动时,我们会在开发机器上进行构建。只要干净地编译,我们停止(前端服务器数量)/ 2,rsync resources目录和二进制文件的新副本,然后使用脚本启动备份。然后重复另一半。我认为你应该质疑在你的前端服务器上维护一个完整的工具链的逻辑,只要你能够轻松地传输二进制和静态资产 - 只要外部库(数据库,图像等) )版本与构建环境相匹配。哎呀,只要os和库的版本匹配,就可以使用virtualbox实例进行最终编译。

+0

这是我通常采取的方法。有时我用git部署我的二进制+静态文件。是的,git回购是巨大的,因为它具有二进制文件,但这使得在出现问题的情况下恢复到最后的良好设置很简单。 我也通常运行我的应用程序从一个while(1)语句包围的脚本内。这样,如果它以任何方式崩溃,它会自动重新启动。这也允许你用一个简单的“git pull”和SIGHUP切换到运行中的二进制文件。 – mightybyte

+0

你能描述一下你需要开始说什么样的脚本,一个Snap或Happstack webapp吗?我在我的本地机器上安装了我的快照应用程序,但我完全不知道如何在生产服务器上启动它。我也发布了一个关于这个问题,如果你有一些空闲时间:http://stackoverflow.com/questions/11214167/how-to-run-snap-haskell-webapp-in-production – drozzy