Помогите с запуском сервера разработки 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 ответа

Решение

Я не сталкивался с этой конкретной проблемой, но сообщение об ошибке выглядит так, будто это простой вопрос о том, что GHC не может найти версию 3.0.3.2 "базовый". Эта версия была доступна для сборки начиная с GHC 6.9, поэтому она должна быть у вас. Попробуйте выполнить следующую команду:

ghc-pkg check

Это скажет вам, если что-то не так с вашими пакетами. Cabal может быть чем-то вроде кошмара для зависимостей - отчасти, кажется, потому что многие разработчики на Haskell недооценивают степень изменения базовых библиотек в будущем. Таким образом, они будут определять зависимость как ">= [версия пакета x]", не ограничивая максимальную версию доступной в настоящее время. Или они просто полностью исключают ограничение версии.

Я счастлив сказать, что Йесод не попадает в эту ловушку. Но несколько библиотек, от которых это зависит, делают. Начав разработку на 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 и посмотрим как пойдет. В лучшем случае это работает. Если нет, дайте нам знать.

Согласно руководству Yesod за пять минут, вы, кажется, пропускаете вызов команды "установка cabal" между вашим "cd mysite" и "yesod devel". Возможно, потребуется установить дополнительные пакеты в зависимости от ваших ответов во время "yesod init", например, какую базу данных вы хотите использовать.

Кроме того, вы можете проверить, что порт в настоящее время не используется, поскольку у вас есть "Адрес уже используется", показанный в вашей расшифровке.

Во-первых, было бы неплохо разрешить все поврежденные пакеты, о которых сообщает проверка ghc-pkg, удалив / переустановив / обновив их.

Далее, можете ли вы вручную без труда создать приложение mysite? Если ваш mysite.cabal на самом деле не указывает base в списке, зависящем от сборки, вы должны следовать предложению, чтобы добавить это.

Повторяющееся сообщение Testing Files является нормальным для текущего yesod devel, оно опрашивает ваши исходные файлы.

Другие вопросы по тегам