在 Ubuntu 13.10 上设置 Yesod



按照快速入门中的说明进行操作后,我在打开网页时在 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 export记录集'

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

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.

这似乎与mmorphGitHub 存储库中的这两个问题有关:

  • 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 sandboxyesod-bin目录中创建一个名为.cabal-sandbox的目录,yesod二进制文件(以及yesod-bin包中的其他几个二进制文件)可以在.cabal-sandbox/bin文件夹中找到。只需将该文件夹添加到您的PATH中,您应该能够执行快速入门末尾所示的yesod inityesod 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

最新更新