首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行不带电缆的HAppStack应用程序

运行不带电缆的HAppStack应用程序
EN

Stack Overflow用户
提问于 2012-01-26 19:47:31
回答 2查看 182关注 0票数 0

我正在试用HAppStack。我安装了HAppStack并创建了一个项目:happstack new project web。创建了一个新文件夹'web‘,并在其下创建了项目留言簿。所以现在我想运行它。我唯一能做的就是运行cabal install。但我想运行我的应用程序,而不是安装cabal!执行run.sh错误:找不到模块'Paths_guestbook‘。我该怎么做呢?

编辑:一般来说,有没有像Snap一样不用重建就能运行HAppStack应用程序的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 11:49:44

简短版本:

run.sh似乎缺少包含参数。将其修改为如下形式:

代码语言:javascript
复制
#!/bin/sh
runghc -isrc -isrc-interactive-only src/Main.hs

我已经更新了darcs中的run.sh以包含此更改。

长版本:

通常,Happstack应用程序不需要该标志。你通常可以这样做,runhaskell Main.hs。但在该特定示例中,Main.hs显式导入:

代码语言:javascript
复制
import Paths_guestbook (version)

它在versionInfo函数中使用,以便服务器可以报告它自己的版本号。虽然src-interactive-only中的版本号是硬编码的,并且通常会过期。所以它只有在你实际使用cabal构建的时候才是正确的。

运行cabal build时,通常会自动创建Paths_guestbook模块。因此,另一个修复方法是将run.sh更改为:

代码语言:javascript
复制
#!/bin/sh
runghc -isrc -idist/build/autogen src/Main.hs

然后运行一次cabal configure && cabal build。在此之后,您将能够使用run.sh (直到您执行cabal clean)。

另一种选择是在.cabal文件中设置CPP标志,并且仅在通过cabal构建应用程序时导入Paths_guestbook

例如,在happstack.com源代码中:

http://patch-tag.com/r/stepcut/happstackDotCom/snapshot/current/content/pretty/Main.hs

在第40行(大约),您将看到一个#ifdef __CABAL__。happstack.com需要能够知道在哪里可以找到静态内容,比如.css文件。当在本地目录中执行runhaskell Main.hs时,它将在本地目录的子目录中查找文件。如果您使用cabal install,那么它将查看cabal安装数据文件的位置。或者,您可以使用命令行参数覆盖默认位置。(这是该应用程序的debian打包所做的事情)。

不幸的是,happstack new project命令有点糟糕,因为作者已经为人父母,很长一段时间没有时间处理它了。为了减少混淆,它可能会从即将发布的Happstack版本中删除。

为了真正有用,我认为该命令需要提示输入一堆值,然后从一组模板生成一个新项目。类似于'cabal init‘的工作原理。但目前,还没有人主动提供时间来实现这一点。

要想在无需重启服务器的情况下自动看到对源代码的更改,您可以使用happstack-plugins库。这里有一个截屏视频:

http://happstack.blogspot.com/2010/10/recompile-your-haskell-based-templates.html

票数 0
EN

Stack Overflow用户

发布于 2012-01-26 19:52:31

通常,您可以通过执行以下操作,在不安装的情况下构建Cabal项目:

代码语言:javascript
复制
$ cabal configure
$ cabal build

生成的可执行文件通常称为dist/build/<project>/<project>

您得到的具体错误是因为代码必须使用Cabal构建以获取Paths_guestbook模块,该模块将包含有关它所使用的数据文件的位置的信息。(如果您运行可执行文件而不安装它,可能无法找到这些数据文件;在这种情况下,您需要一个更复杂的解决方案,比如cabal-dev。)

(我不是Happstack的用户,所以我不知道是否有官方的方法来完成这一点,但一般来说,这应该适用于任何基于Cabal的项目。存储库显示run.sh是最后一次修改的in 2009,所以我怀疑它只是有点腐烂。不过,它没有做任何特殊的事情,所以cabal build应该可以很好地工作。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9017702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档