2

按照QuickStart上的说明进行操作后,在打开网页时,我在 Yesod 中看到了一些错误。错误以:

...

无法满足 -package-id wai-extra-1.3.4.6-62543d69d10941dae1d9b206c3eb3067:

wai-extra-1.3.4.6-62543d69d10941dae1d9b206c3eb3067 is unusable due to missing or recursive dependencies:
  blaze-builder-conduit-1.0.0-1053545317cd68e3d51439dd9a0e622d zlib-conduit-1.0.0-b51dc7daf506ea4c5ecd031c5101d96a
(use -v for more information)

构建失败,暂停...

希望相关,引用的教程让我运行

阴谋集团开发安装

在一个新的 Yesod 项目上,但这也给了我错误:

...

[1 of 1] 编译 Control.Monad.Logger ( Control/Monad/Logger.hs, dist/build/Control/Monad/Logger.o )

Control/Monad/Logger.hs:63:39: 模块System.Log.FastLogger' does not exportpushLogStr'

Control/Monad/Logger.hs:63:72: 模块System.Log.FastLogger' does not exportLoggerSet'

Control/Monad/Logger.hs:63:83: 模块System.Log.FastLogger' does not exportnewLoggerSet'

Control/Monad/Logger.hs:63:97: 模块System.Log.FastLogger' does not exportdefaultBufSize' 无法安装 monad-logger-0.3.3.0

...

在后面的这组错误中,我遇到了一个页面,提示问题已得到修复(所以不会让我发布超过 2 个链接,但谷歌错误,它就出现了)。

有任何想法吗?

提前致谢!

4

2 回答 2

7

我建议cabal sandbox对每个 Yesod 项目使用,而不是将 Yesod 平台安装为系统库的一部分。将 cabal 沙箱视为单个项目中 Haskell 包的本地化Data.Text集合,因此您可以在 2 个不同的 cabal 沙箱中拥有不同版本的包,例如。使用cabal sandbox需要更长的时间进行编译,但它使依赖解析变得更简单(在此处阅读更多内容:(在此处阅读更多内容:http: //coldwa.st/e/blog/2013-08-20-Cabal-sandbox.html)。cabal sandbox需要cabal如果我没记错的话,至少是 1.18的版本。

好了,话不多说。让我们开始吧。

要获得最新cabal的. 由于您使用的是 Ubuntu,因此只需:cabalcabalcabal sandbox

sudo apt-get install cabal

一旦你安装了某个版本cabal,运行:

cabal sandbox

如果你看到类似这样的东西:

cabal: Please specify a subcommand (see 'help sandbox')

那么恭喜,cabal你所支持的版本cabal sandbox只要你有一个阴谋集团与阴谋集团沙盒部分的答案。

相反,如果您看到如下内容:

cabal: unrecognised command: sandbox (try --help)

然后,您将需要更现代的 cabal 版本。只需在 github 上克隆 cabal 存储库

git clone https://github.com/haskell/cabal.git

转到目录,然后签出分支Cabal-v1.18.1.2,如下所示:

git checkout Cabal-v1.18.1.2

然后执行:

cabal install Cabal/ cabal-install/

这应该安装cabal$HOME/.cabal/bin文件夹中。确保在系统所在文件夹之前添加 $HOME/.cabal/bin到您的环境变量。PATHcabal

一旦你有了一个带有阴谋集团沙盒的阴谋集团

根据我从Yesod 快速入门指南中阅读的内容,您将需要安装该yesod-bin软件包。它的hackage页面在这里。基本上,yesod-bin它为您提供了一个yesod允许您初始化脚手架站点的二进制文件。最新版本yesod-bin是 1.2.5.6,这就是我们要安装的。

创建一个名为的目录yesod-bin

mkdir yesod-bin

进入该目录,并在其中设置一个 cabal 沙箱,如下所示:

cabal sandbox init

使用以下命令从 hackage 获取最新的包列表:

cabal update

现在,我们将yesod-bin在 cabal 沙箱中安装最新版本的 1.2.5.6。但是,yesod-bin对包有依赖mmorph,默认安装1.01版本,尝试安装mmorph-1.01会出现如下错误信息:

src/Control/Monad/Morph.hs:76:8:
    Could not find module `Control.Applicative.Backwards'
    Use -v to see a list of the files searched for.
Failed to install mmorph-1.0.1
cabal: Error: some packages failed to install:
mmorph-1.0.1 failed during the building phase. The exception was:
ExitFailure 1

并且在yesod-bin没有指定mmorph包版本的情况下安装默认为正在安装mmorph-1.0.1,导致以下错误:

cabal: Error: some packages failed to install:
base64-conduit-1.0.0 depends on mmorph-1.0.1 which failed to install.
blaze-builder-conduit-1.0.0 depends on mmorph-1.0.1 which failed to install.
conduit-1.0.10 depends on mmorph-1.0.1 which failed to install.
http-client-conduit-0.2.0.1 depends on mmorph-1.0.1 which failed to install.
http-conduit-2.0.0.3 depends on mmorph-1.0.1 which failed to install.
http-reverse-proxy-0.3.0 depends on mmorph-1.0.1 which failed to install.
mmorph-1.0.1 failed during the building phase. The exception was:
ExitFailure 1
network-conduit-1.0.1 depends on mmorph-1.0.1 which failed to install.
project-template-0.1.3.2 depends on mmorph-1.0.1 which failed to install.
resourcet-0.4.10 depends on mmorph-1.0.1 which failed to install.
wai-2.0.0 depends on mmorph-1.0.1 which failed to install.
wai-logger-2.1.1 depends on mmorph-1.0.1 which failed to install.
warp-2.0.2 depends on mmorph-1.0.1 which failed to install.
yaml-0.8.5.3 depends on mmorph-1.0.1 which failed to install.
yesod-bin-1.2.5.6 depends on mmorph-1.0.1 which failed to install.

这似乎与mmorphgithub repo中的这两个问题有关:

但是,mmorph版本1.0.0可以正常工作。因此,我们必须在安装时将版本指定mmorph1.0.0yesod-bin,如下所示:

cabal install mmorph-1.0.0 yesod-bin-1.2.5.6

这将需要相当长的时间。cabal sandbox在目录中创建一个名为.cabal-sandboxyesod-bin目录,并且可以在该文件夹中找到yesod二进制文件(以及包中的其他几个二进制文件) 。只需将该文件夹添加到您的中,您就应该能够执行快速入门末尾的 和。yesod-bin.cabal-sandbox/binPATHyesod inityesod devel

于 2014-01-18T09:54:20.453 回答
1

作为对@yanhan 很好的答案的快速更新,因为我尝试在 Ubuntu 14.04 LTS 上遵循他的指导方针并有点卡住。

如果你没有预装 cabal 可执行文件,你也可以这样做:

git clone https://github.com/haskell/cabal.git

然后当然是:

git checkout Cabal-v1.20.0.2

然后你可以使用bootstrap.sh脚本来安装 cabal 可执行文件和 Cabal 包:

cd cabal-install && ./bootstrap.sh

这将需要一些时间,但不久之后您可以检查新安装的 cabal 可执行文件的版本:

$HOME/.cabal/bin/cabal --version
于 2014-10-20T16:30:36.207 回答