使用haskell堆栈在生产环境和沙箱环境之间切换
问题描述:
我正在调用Web服务的haskell应用程序。我希望在构建stack build
时,应用程序以实际生产服务器的URL为目标,但在使用stack repl
进行调试时,应用程序将以测试服务器的URL为目标。使用haskell堆栈在生产环境和沙箱环境之间切换
我想这可以通过条件编译来实现,但是如何配置堆栈以将选项(如-DDEBUG=1
)传递给GHCi而不是GHC?更一般地说,许多工具(Visual Studio,Xcode ...)支持项目的多个构建配置。是否有堆栈或cabal等效?
答
一种方法是在运行时检查System.Environment.getProgName
是否为ghc
。这不一定是可靠的检查,因为可执行文件在某些情况下可能被称为别的。对于安装了堆栈的可执行文件,它将是ghc
,但对于安装了ghcs的系统,很可能是ghc-8.0.1
或其他东西。所以,这种方法并不全是可靠的。
我发现了一个更好的方法,那就是添加一个.ghci
文件,其中包含ghci在启动时运行的命令。我没有测试过这个,但我认为它可以将:set -DDEBUG=1
放在.ghci
的项目根目录下。还需要使用chmod go-w .ghci
来调整其权限。
我不知道'.ghci'文件。我只是尝试了你的建议,它的工作原理。非常感谢你! – Pascal91