Haskell 在没有阴谋集团的情况下运行HAppStack应用程序
我在试着做些什么。我安装了HAppStack并创建了一个项目:Haskell 在没有阴谋集团的情况下运行HAppStack应用程序,haskell,happstack,Haskell,Happstack,我在试着做些什么。我安装了HAppStack并创建了一个项目:HAppStack新建项目web。新文件夹“web”已创建,其下有project guestbook。所以现在我想运行它。我唯一能做的就是运行cabalinstall。但我想运行我的应用程序而不安装阴谋!执行run.sh错误:找不到模块“路径\留言簿”。我怎么做 编辑: 一般来说,有没有一种方法可以运行HAppStack应用程序而不必像在Snap中一样重建?一般来说,您可以通过执行以下操作来构建Cabal项目而无需安装: $ caba
HAppStack新建项目web
。新文件夹“web”已创建,其下有project guestbook。所以现在我想运行它。我唯一能做的就是运行cabalinstall
。但我想运行我的应用程序而不安装阴谋!执行run.sh错误:找不到模块“路径\留言簿”。我怎么做
编辑:
一般来说,有没有一种方法可以运行HAppStack应用程序而不必像在Snap中一样重建?一般来说,您可以通过执行以下操作来构建Cabal项目而无需安装:
$ cabal configure
$ cabal build
生成的可执行文件通常被称为dist/build/
您遇到的具体错误是,代码必须使用Cabal构建才能获取路径\u留言簿
模块,该模块将包含有关其使用的数据文件位置的信息。(如果在未安装可执行文件的情况下运行可执行文件,则可能无法找到这些数据文件;在这种情况下,需要更详细的解决方案,例如。)
(我不是Happstack的用户,所以我不知道是否有正式的方法来实现这一点,但这基本上适用于任何基于阴谋集团的项目。存储库显示,run.sh
是上次修改的,所以我怀疑它有点烂。不过它没有做任何特殊的事情,所以Cabal build
应该可以正常工作t好。)短版:
run.sh似乎缺少include参数。请将其修改为如下所示:
#!/bin/sh
runghc -isrc -isrc-interactive-only src/Main.hs
我已在DARC中更新run.sh以包含此更改
长版本:
通常,Happstack应用程序不需要该标志。您通常可以执行,runhaskell Main.hs
。但在该特定示例中,Main.hs显式导入:
import Paths_guestbook (version)
在versionInfo
函数中使用,以便服务器可以报告其自己的版本号。虽然src interactive only
中的版本号是硬编码的,通常会过时。因此,只有使用cabal实际构建时才正确
Paths\u留言簿
模块通常在运行cabal build
时自动创建。因此,另一个修复方法是将run.sh更改为:
#!/bin/sh
runghc -isrc -idist/build/autogen src/Main.hs
然后运行cabal configure&&cabal build
一次。之后,您将能够使用run.sh
(直到您执行cabal clean
)
另一个选项是在.cabal文件中设置CPP标志,并且仅在通过cabal构建应用程序时导入path\u留言簿
例如,在happstack.com源代码中:
第40行(大约)您将看到一个#ifdef uu CABAL uuu
。hapstack.com需要知道在哪里可以找到静态内容,例如.css文件。在本地目录中执行runhaskell Main.hs
时,它将在本地目录的子目录中查找文件。如果执行CABAL安装
,它将在c时查找abal
安装数据文件。或者,您可以使用命令行参数覆盖默认位置。(这是该应用程序的debian包所做的)
不幸的是,happstack new project
命令有点糟糕,因为作者成为了家长,很长时间没有时间处理它。为了减少混乱,它可能会从即将发布的happstack版本中删除
为了真正有用,我认为该命令需要提示输入一组值,然后从一组模板生成一个新项目。类似于“cabal init”的工作方式。但目前,还没有人自愿花时间来实现这一点
要查看对源代码的更改在不重新启动服务器的情况下自动显示,您可以使用happstack plugins
库
所以您认为这是编辑后更新的最快方法:
cabal配置和&cabal构建
然后运行生成的服务器可执行文件。有没有类似于动态语言的方法可以在不重建的情况下查看更改?我在Snap framework中看到了这种功能(但它会降低性能成本).对于后续版本,您可以跳过配置
步骤:cabal build&&dist/build/
。正如我所说,我不是Happstack用户,因此我不知道是否有Happstack的自动重新加载服务器;如果您感兴趣,我建议您作为一个单独的问题询问。长版本中的第二个可以,但是首先是ot。谢谢。祝贺作者!:)