按照快速入门中的说明进行操作后,我在打开网页时在 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 export
pushLogStr'Control/Monad/Logger.hs:63:72: 模块
System.Log.FastLogger' does not export
记录集'Control/Monad/Logger.hs:63:83: 模块
System.Log.FastLogger' does not export
newLoggerSet'Control/Monad/Logger.hs:63:97: 模块
System.Log.FastLogger' does not export
默认BufSize' 无法安装 monad-logger-0.3.3.0。
在后面的一组错误中,我遇到了一个页面,表明该问题已得到解决(SO 不会让我发布超过 2 个链接,但谷歌错误就会出现)。
有什么想法吗?
提前感谢!
我建议为每个Yesod项目使用cabal sandbox
,而不是将Yesod平台作为系统库的一部分安装。把一个阴谋集团的沙箱想象成一个项目中Haskell软件包的本地化集合,所以你可以在2个不同的阴谋集团沙箱中拥有不同版本的软件包,比如Data.Text
。使用cabal sandbox
需要更长的编译时间,但它使依赖项解析更简单(在此处阅读更多内容:(在此处阅读更多内容:http://coldwa.st/e/blog/2013-08-20-Cabal-sandbox.html)。 如果我没记错的话,cabal sandbox
需要至少 1.18 的cabal
版本。
好了,说够了。让我们开始吧。
要获取最新的cabal
,如果您通过包管理器安装了cabal
,即使包管理器在没有cabal sandbox
的情况下安装了cabal
,也会更容易。由于您使用的是 Ubuntu,只需:
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)
然后你将需要一个更现代版本的阴谋集团。只需在github上克隆阴谋集团存储库:
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/
这应该在$HOME/.cabal/bin
文件夹中安装cabal
。请务必在系统cabal
所在的文件夹之前将$HOME/.cabal/bin
附加到PATH
环境变量。
一旦你有一个带有阴谋集团沙盒的阴谋集团
根据我从 Yesod 快速入门指南中读到的内容,您将需要安装yesod-bin
包。它的黑客页面在这里。基本上,yesod-bin
为您提供了一个yesod
二进制文件,允许您初始化基架站点。yesod-bin
的最新版本是 1.2.5.6,这就是我们要安装的内容。
创建一个名为yesod-bin
的目录:
mkdir yesod-bin
进入该目录,并在其中设置一个阴谋集团沙箱,如下所示:
cabal sandbox init
使用以下方法从hackage获取最新的软件包列表:
cabal update
现在,我们将在阴谋集团沙箱中安装最新版本的yesod-bin
,1.2.5.6。但是,yesod-bin
依赖于默认安装版本 1.01 的mmorph
包,尝试安装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
并且在没有指定mmorph
包版本的情况下安装yesod-bin
默认为安装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.
这似乎与mmorph
GitHub 存储库中的这两个问题有关:
- https://github.com/Gabriel439/Haskell-MMorph-Library/issues/8
- https://github.com/Gabriel439/Haskell-MMorph-Library/pull/10
但是,mmorph
版本 1.0.0工作正常。因此,我们必须在安装时将mmorph
的版本指定为1.0.0yesod-bin
,如下所示:
cabal install mmorph-1.0.0 yesod-bin-1.2.5.6
这将需要相当长的时间。cabal sandbox
在yesod-bin
目录中创建一个名为.cabal-sandbox
的目录,yesod
二进制文件(以及yesod-bin
包中的其他几个二进制文件)可以在.cabal-sandbox/bin
文件夹中找到。只需将该文件夹添加到您的PATH
中,您应该能够执行快速入门末尾所示的yesod init
和yesod devel
。
作为@yanhan伟大答案的快速更新,因为我试图遵循他在 Ubuntu 14.04 LTS 上的指南并陷入困境。
如果你没有预装阴谋集团可执行文件,你也可以这样做:
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