使用Haskell堆栈构建时添加自定义配置文件

使用Haskell堆栈构建时添加自定义配置文件,haskell,config,haskell-stack,Haskell,Config,Haskell Stack,我目前正在学习Haskell,作为一项练习,我与仆人一起编程了一个简单的RestAPI。此程序不使用数据库,而是写入和读取文件。 程序应该读取和写入的路径当前通过自定义配置文件给出,例如“myconfig.ini”,我用包读取此配置 这在本地开发时非常有效,因为我使用了stack ghci来运行main方法,从而运行程序。完成所有基本功能后,我想尝试将其部署到nginx服务器上。 我只是像建议的那样将可执行文件复制到nginx的/http文件夹中,然后尝试执行它,结果遇到了问题。配置文件不再

我目前正在学习Haskell,作为一项练习,我与仆人一起编程了一个简单的RestAPI。此程序不使用数据库,而是写入和读取文件。
程序应该读取和写入的路径当前通过自定义配置文件给出,例如“myconfig.ini”,我用包读取此配置

这在本地开发时非常有效,因为我使用了
stack ghci
来运行main方法,从而运行程序。完成所有基本功能后,我想尝试将其部署到nginx服务器上。
我只是像建议的那样将可执行文件复制到nginx的
/http
文件夹中,然后尝试执行它,结果遇到了问题。配置文件不再位于同一文件夹中,因此无法再读取


我习惯于Java,其中所需的文件通常是生成的归档文件的一部分,例如
.war
文件。在哈斯克尔有可能做到这一点吗?如果没有,关于配置文件的最佳实践是什么?

如果你想用你的程序“打包”配置文件,那么这很容易做到;Template Haskell有一个函数,允许您在编译时执行任意操作(例如读取和解析配置文件);该软件包使其更易于访问。这样,您就可以用类似于
runAppWithConfig::Configuration->IO()
的格式编写应用程序,然后有两个二进制文件,它们基本上就是
main=readConfigFile>=runAppWithConfig
main=runAppWithConfig embeddedConfig
。或者您可以同时执行这两项操作,嵌入默认配置,但也允许使用命令行参数覆盖默认选项,以及其他不允许的选项

使用大量编译时配置的方法

当然,你也可以选择Haskell独立的方式,通过使用类似于自解压存档和应用程序的混合,创建类似于.war的东西


但实际上,如何进行配置并不是特定于语言的,关于如何进行配置有很多方法。您甚至可以让应用程序保持原样,随附所需的配置,而不是通过二进制文件进行复制。

谢谢,这给了我一个很好的开始概述和更多的内容:D