Помогите с запуском сервера разработки 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, оно опрашивает ваши исходные файлы.