Настройка Yesod в Ubuntu 13.10

Следуя инструкциям на QuickStart, я вижу некоторые ошибки в 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)

Ошибка сборки, пауза...

Будем надеяться, что связанный учебник поможет мне

установка cabal-dev

на новом проекте Yesod, однако это также дает мне ошибки:

...

[1 из 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 exportLoggerSet"

Control/Monad/Logger.hs:63:83: Модуль System.Log.FastLogger' does not exportnewLoggerSet"

Control/Monad/Logger.hs:63:97: Модуль System.Log.FastLogger' does not exportdefaultBufSize'Не удалось установить monad-logger-0.3.3.0

...

Из-за этого более позднего набора ошибок я наткнулся на страницу, в которой говорилось, что проблема была исправлена ​​(SO не разрешает мне публиковать более 2 ссылок, но Google выдает ошибку, и она появляется прямо сейчас).

Есть идеи?

Заранее спасибо!

2 ответа

Решение

Я бы предложил использовать cabal sandbox для каждого проекта Yesod вместо установки платформы Yesod как части вашей системной библиотеки. Подумайте о песочнице cabal как о локализованной коллекции пакетов Haskell в одном проекте, так что вы можете иметь разные версии пакета, скажем Data.Text, в 2 разных песочницах. С помощью cabal sandbox компиляция занимает больше времени, но упрощает разрешение зависимостей (подробнее здесь: (подробнее здесь: http://coldwa.st/e/blog/2013-08-20-Cabal-sandbox.html). cabal sandbox требует cabal версия хотя бы 1.18 если я не ошибаюсь.

Хорошо, хватит разговоров. Давайте начнем.

Чтобы получить последние cabal, это проще, если у вас есть cabal устанавливается через менеджер пакетов, даже если менеджер пакетов устанавливает cabal без cabal sandbox, Поскольку вы находитесь на 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)

Тогда вам понадобится более современная версия клики. Просто клонируйте репозиторий Cabal на 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/

Это должно установить cabal в $HOME/.cabal/bin папка. Не забудьте предварять $HOME/.cabal/bin на ваш PATH переменная среды, перед папкой, в которой находится cabal расположен.

Как только у вас есть Кабала с песочницей Кабала

Основываясь на том, что я прочитал в кратком руководстве по 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 имеет зависимость от mmorph пакет, который по умолчанию устанавливает версию 1.01 и пытается установить 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

и установка yesod-bin без уточнения mmorph версия пакета по умолчанию устанавливается 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.

который, кажется, связан с этими двумя проблемами в mmorph GitHub репо:

Тем не мение, mmorph версия 1.0.0 работает отлично. Таким образом, нам нужно будет указать версию mmorph быть 1.0.0 при установке yesod-bin, как это:

cabal install mmorph-1.0.0 yesod-bin-1.2.5.6

Это займет довольно много времени. cabal sandbox создает каталог с именем .cabal-sandbox внутри yesod-bin каталог, а yesod двоичный (вместе с несколькими другими двоичными файлами из yesod-bin пакет) можно найти в .cabal-sandbox/bin папка. Просто добавьте эту папку в свой PATH, и вы должны быть в состоянии сделать yesod init а также yesod devel как видно в конце быстрого старта.

В качестве быстрого обновления @yanhan отличный ответ, так как я попытался следовать его рекомендациям по Ubuntu 14.04 LTS и немного застрял.

Если у вас нет предустановленного исполняемого файла cabal, вы также можете сделать:

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
Другие вопросы по тегам