Настройка 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 export
pushLogStr"Control/Monad/Logger.hs:63:72: Модуль
System.Log.FastLogger' does not export
LoggerSet"Control/Monad/Logger.hs:63:83: Модуль
System.Log.FastLogger' does not export
newLoggerSet"Control/Monad/Logger.hs:63:97: Модуль
System.Log.FastLogger' does not export
defaultBufSize'Не удалось установить 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 репо:
- https://github.com/Gabriel439/Haskell-MMorph-Library/issues/8
- https://github.com/Gabriel439/Haskell-MMorph-Library/pull/10
Тем не мение, 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