Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 在没有阴谋集团的情况下运行HAppStack应用程序_Haskell_Happstack - Fatal编程技术网

Haskell 在没有阴谋集团的情况下运行HAppStack应用程序

Haskell 在没有阴谋集团的情况下运行HAppStack应用程序,haskell,happstack,Haskell,Happstack,我在试着做些什么。我安装了HAppStack并创建了一个项目:HAppStack新建项目web。新文件夹“web”已创建,其下有project guestbook。所以现在我想运行它。我唯一能做的就是运行cabalinstall。但我想运行我的应用程序而不安装阴谋!执行run.sh错误:找不到模块“路径\留言簿”。我怎么做 编辑: 一般来说,有没有一种方法可以运行HAppStack应用程序而不必像在Snap中一样重建?一般来说,您可以通过执行以下操作来构建Cabal项目而无需安装: $ caba

我在试着做些什么。我安装了HAppStack并创建了一个项目:
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。谢谢。祝贺作者!:)