Haskell Snap:应用程序部署和运行时依赖性

时间:2012-04-02 07:36:54

标签: haskell haskell-snap-framework

清理Snap项目源目录(删除dist)会产生以下抱怨:

A web handler threw an exception. Details:
GHC error: can't find a package database at dist/package.conf.inplace

所以,如果我清理源目录,它会停止工作吗?只有在我使用开发标志进行编译时才会发生这种情况吗?

这让我想到了快照应用程序部署的问题。 我们实际上是什么rsync到服务器以及什么是运行时依赖项? 我当然不想在部署服务器上安装整个haskell平台。 我在服务器上需要的只是项目可执行文件和静态文件,如* .tpl,* .css等。这是正确的吗?

我可以看到两种部署应用程序的方法:rsync可执行文件及其依赖项或创建二进制分发tarball并将其转移到服务器。 通常的做法是什么?

我需要在二进制tarball或rsync脚本中包含哪些文件才能满足所有运行时依赖性?

谢谢

1 个答案:

答案 0 :(得分:3)

首先,是的,这只是使用开发模式的结果。它使用编译环境中的各种工件。 (这是确保在动态重新加载时正确复制编译环境的唯一方法。)如果删除它们,它将停止工作。

但在生产模式下,您只需要二进制和静态资源。好吧,GHC将可执行文件链接到的任何动态库。这主要是像libc这样的标准内容。标准Linux安装中有时缺少的唯一一个是libgmp。当然,如果您使用任何绑定到其他动态库的FFI代码,您还需要确保这些库也被覆盖。