最少的haskell(ghc)程序安装(在没有ghc/cabal的情况下部署)



(我的问题是在没有haskell平台、ghc、cabal…的情况下分发二进制文件)

我需要部署一个精心构建的haskell应用程序(一个Yesod脚手架),但我有磁盘空间限制。

GHC大小约为1G字节,存储所有cabal源代码、包等…需要更多磁盘空间等…

显然,haskell平台,ghc。。。是关于开发(而不是部署)。

在我的特定情况下,我可以生成

cabal clean && cabal configure && cabal build

并成功运行(有些类似)

./dist/build/MyEntryPoint/MyEntryPoint arg arg arg

但是,依赖关系呢?,如何将其转移到生产环境中?(连同我的"dist">编译)

我可以在没有cabal的情况下放置二进制依赖项吗?怎样

非常感谢!

默认情况下,ghc使用Haskell库的静态链接。因此产生的二进制独立于Haskell生态系统。如果您的程序不需要任何数据文件,只需将二进制文件从./dist/build/MyEntryPoint/MyEntryPoint复制到主机

如果您也有使用Cabal的数据路径查找逻辑由二进制文件引用的数据文件(例如模板、图像、静态html页面),您可以使用Setup copy如下(以happy为例):

/tmp/hhappy-1.18.10$/安装程序配置警告:不赞成使用安装脚本中的defaultUserHooks。正在配置happy-1.18.10。。。/tmp/happy-1.18.10美元/安装程序生成建筑happy-1.18.10。。。正在预处理happy-1.18.10的可执行文件"happy"。。。[1/18]编译名称集(src/NameSet.hs,dist/build/havely/havely-tmp/NameSet.o)[..][18/18]编译Main(src/Main.lhs,dist/build/chappy/chappy tmp/Main.o)正在链接dist/build/chappy/happy。。。/tmp/happy-1.18.10美元/安装程序副本--destdir=/tmp/to_be_deploted/在/tmp/to_be_deployd/usr/local/bin中安装可执行文件/tmp/happy-1.18.10$find/tmp/to_be_edeployed/tmp/to_be_已部署/tmp/to_be_deployd/usr/tmp/to_be_deployd/usr/local/tmp/to_be_deployd/usr/local/bin/tmp/to_be_deployd/usr/local/bin/happy/tmp/to_be_deployd/usr/local/share/tmp/to_be_deployd/usr/local/share/doc/tmp/to_be_edeployed/usr/local/share/doc/happy-1.18.10/tmp/to_be_deployd/usr/local/share/doc/happy-1.18.10/LICENSE/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/tmp/to_be_edeployed/usr/local/share/hhappy-1.18.10/GLR_Lib-ghc-debug/tmp/to_be_edeployed/usr/local/share/hapy--1.18.10/GLR_Lib-ghc/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/GLR_Lib/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/GLR_Base/tmp/to_be_edeployed/usr/local/share/hhappy-1.18.10/HappyTemplate-arrays-conforce-debug/tmp/to_be_edeployed/usr/local/share/hhappy-1.18.10/HappyTemplate-arrays-ghc-debug/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/HappyTemplate-arrays-debug/tmp/to_be_edeployed/usr/local/share/hhappy-1.18.10/HappyTemplate-arrays-conforce/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/HappyTemplate-arrays-ghc/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/HappyTemplate-arrays/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/HappyTemplate-coerce/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/HappyTemplate-ghc/tmp/to_be_deployd/usr/local/share/hhappy-1.18.10/HappyTemplate/tmp/happy-1.18.10$rsync-rva/tmp/to_be_deployd/production.host:/[..]

如果不想安装到/usr/local中,则将所需前缀传递给Setup configure

如果目标主机在其他方面是相似的(安装了相同版本的C库,如gmp和ffi),则此操作效果良好。如果您还需要静态链接一些C库,请参阅hammar在评论中链接的问题。

最新更新