我该如何解决与Yesod 10.2有关的http-conduit问题?

3
当运行yesod devel时,我在我的应用程序中遇到了以下问题。开始很好(编译完成),但在预处理可执行文件时出现故障:

正在解决依赖项... 配置WebToKindle-0.0.0... 重建应用程序... 由于config/models强制重新编译./Model.hs 由于config/routes强制重新编译./Foundation.hs 由于messages/en.msg强制重新编译./Foundation.hs 由于templates/default-layout-wrapper.hamlet强制重新编译./Foundation.hs 由于templates/default-layout.hamlet强制重新编译./Foundation.hs 由于templates/homepage.hamlet强制重新编译./Handler/Root.hs 预处理库WebToKindle-0.0.0... 预处理WebToKindle-0.0.0的可执行文件... 构建WebToKindle-0.0.0...

Application.hs:22:8: 找不到模块Network.HTTP.Conduit': 它是hidden package http-conduit-1.2.6'的成员。 也许您需要将http-conduit添加到.cabal文件的build-depends中。 使用-v查看搜索的文件列表。构建失败,暂停...

使用cabal install安装我的应用程序可以正常工作,我能够启动它并在浏览器中浏览起始页。所以这个问题似乎只在devel工具中出现。
我尝试注销相关的包并重新安装它们,以帮助cabal找出依赖关系。 cabal install yesod yesod-auth authenticate http-conduit 不幸的是,那没有改变任何事情。由于我想享受“即时满足”开发的好处,我感谢任何帮助我解决这个问题的人。
更新:经过一段时间的调试和monadic的帮助,我找到了问题的源头。问题在于我已经将cabal文件中的cabal版本更改为1.8。我将其改回1.6,现在一切正常。
1个回答

2

[警告:我的建议与Yesod无关,因为我不使用它。可能是错误的]

这个错误并不是在谈论安装方面缺少包。你只能访问在你的cabal文件中列出的依赖项,而不是整个包列表。您需要将http-conduit添加到您的依赖项中(最好使用正确的版本约束)。


我希望事情能够这么简单,但它已经在我的cabal文件中作为依赖项列出了: https://github.com/thlorenz/WebToKindle/blob/yesodsite/src/WebToKindle.cabal。 - Thorsten Lorenz
@Thorsten Lorenz,不过看起来安装并不像是问题所在。然而,这个包有没有被无意中隐藏了呢?(抱歉,只是随口一提... 具体的yesod知识不多) - alternative
@Thorsten Lorenz 哦,我看了一下你的 cabal 文件 - 只有可执行文件将其作为依赖项,而不是库。也许这就是问题所在?根据 cabal 文件,由于库只能通过 yesod devel 构建,因此这非常合理。 - alternative
明白了,我已经将我的 cabal 版本更改为 1.8 并在 cabal 文件中进行了更改。将其改回 1.6 可以解决问题。感谢您帮助我聚焦问题的源头。 - Thorsten Lorenz
@ThorstenLorenz 我认为这不是一个好的解决方案。最好为1.8设置正确的依赖关系... - alternative
就像我说的,我相信我的依赖项已经正确地定义了(例如,http-conduit是声明的依赖项之一)。 Yesod会自动生成cabal文件,并指定cabal 1.6版本,所以乱改可能不是个好主意。我相信将其更改为1.8只会让您遇到不兼容难题,而这些问题可能根本无法解决(例如,Yesod必须有一个特别要求cabal 1.6版本的原因)。 - Thorsten Lorenz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接