[使用Haskell Stack构建时添加自定义配置文件

问题描述 投票:1回答:1

我目前正在学习Haskell,并通过练习用Servant编写了一个简单的RestAPI。该程序不使用数据库,而是写入和读取文件。当前,程序应通过自定义配置文件(例如, “ myconfig.ini”,然后使用config.ini包阅读此配置。

这在本地开发时效果很好,因为我使用stack ghci运行main方法和程序。完成所有基本功能后,我想尝试将其部署在Nginx服务器上。我只是将可执行文件复制到nginx的/http文件夹(如建议的here),并尝试执行它,但遇到了问题。配置文件不再位于同一文件夹中,因此无法再读取。

我习惯于Java,其中必要的文件通常是结果归档文件的一部分,例如.war文件。是否可以在Haskell中实现这一目标?如果没有,关于配置文件的最佳实践是什么?

haskell config haskell-stack
1个回答
0
投票

[如果您想将配置文件与程序“打包”在一起,就很容易做到; Haskell模板具有runIO功能,可让您在编译时执行任意操作(例如读取和解析配置文件)。 file-embed程序包使此操作更易于访问。这样,您可以使用runAppWithConfig :: Configuration -> IO ()之类的代码编写应用程序,然后拥有两个基本上只是main = readConfigFile >>= runAppWithConfigmain = runAppWithConfig embeddedConfig的二进制文件。或者,您也可以两者都做,既可以嵌入默认配置,也可以使用命令行参数覆盖默认选项,而不能覆盖命令行选项。

[Yesod使用很多具有编译时配置的方法。

当然,当然,您也可以走Haskell独立路线,并使用AppImage之类的东西来创建与.war类似的东西,这是自解压存档和应用程序之间的混合。

但是,实际上,配置不是特别针对特定语言的,并且有很多方法可以实现它。您甚至可以保留您的应用程序现在的状态,并随其附带所需的配置,而不仅仅是复制二进制文件。

© www.soinside.com 2019 - 2024. All rights reserved.