帮助运行Yesod Development服务器?

时间:2011-06-02 13:57:57

标签: haskell ubuntu ghc haskell-platform yesod

我目前正在为haskell尝试网络开发框架,最近我遇到了yesod。它似乎很有趣所以我使用cabal安装它,但是我无法运行开发服务器。在他们开始使用说明后,结果如下:

$ yesod init
$ cd mysite
$ yesod devel

Configuring mysite-0.0.0...
Testing files...
Rebuilding app
yesod: bind: resource busy (Address already in use)
Preprocessing library mysite-0.0.0...
Preprocessing executables for mysite-0.0.0...
Building mysite-0.0.0...

Controller.hs:16:7:
    Could not find module `Data.Dynamic':
      It is a member of the hidden package `base'.
      Perhaps you need to add `base' to the build-depends in your .cabal file.
      It is a member of the hidden package `base-3.0.3.2'.
      Perhaps you need to add `base' to the build-depends in your .cabal file.
      Use -v to see a list of the files searched for.
Testing files...
Testing files...
^^ above line just keeps repeating...

我认为它与Data.Dynamic模块有关,但我不知道如何修复它。

其他信息

运行Ubuntu 10.10 Maverick

ghc版本:

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.1

3 个答案:

答案 0 :(得分:4)

我没有碰到这个特定的问题,但是错误消息看起来像是一个简单的问题,GHC无法找到3.0.3.2版本的软件包“base”。自GHC 6.9以来,这个版本已经可以构建,所以你应该拥有它。尝试运行以下命令:

ghc-pkg check

这会告诉您包裹是否有问题。 Cabal对依赖性来说可能是一个噩梦 - 部分似乎是因为很多Haskell开发人员低估了他们底层库在未来的转移程度。因此,他们将依赖关系定义为“> = [包x的版本]”,而不将最大版本限制为当前可用的版本。或者他们完全不考虑版本限制。

Yesod,我很高兴地说,不会陷入这个陷阱。但它依赖的几个库都可以。当您开始在Haskell中开发时,请学习本课程:永远不要假设库的未来版本不会破坏您的代码。他们会的。很多。

如果ghc-pkg出现破损的软件包,您可能需要清理/卸载/重新安装这些软件包,直到它们被清理或隐藏。 (只需要ghc-pkg hide [package name]告诉ghc忽略该包。

你的下一个问题是隐藏的基础包。请尝试以下方法:

ghc-pkg list | grep base

如果您在库周围看到括号,则表示它已隐藏。包base-3.0.3.2可能会显示为隐藏(虽然这有点不太可能,因为这是向后兼容的Prelude所在的位置)。如果它被隐藏,请尝试使用以下命令取消隐藏:

ghc-pkg expose base-3.0.3.2

现在尝试重新运行yesod devel,看看它是怎么回事。最好的情况是它有效。如果没有,请告诉我们。

答案 1 :(得分:2)

根据五分钟的Yesod指南,你似乎错过了对你的“cd mysite”和“yesod devel”之间命令“cabal install”的调用。它可能需要根据您在“yesod init”期间的响应安装更多软件包,例如您要使用的数据库。

此外,您可能想要检查当前是否正在使用该端口,因为您的成绩单中显示了“已在使用的地址”。

答案 2 :(得分:0)

首先,通过删除/重新安装/升级它们来解决ghc-pkg检查报告的任何损坏的软件包是个好主意。

接下来,您可以手动cabal构建mysite应用程序吗?如果你的mysite.cabal实际上没有在build-depends列表中指定base,你应该按照建议添加它。

重复的测试文件消息对于当前的yesod devel是正常的,它正在轮询你的源文件。