Yesod ExitFailure 1 при установке подкладок
Я пытаюсь установить свое первое приложение Yesod для леса. Когда я запускаю cabal-dev install && yesod --dev devel
, он не работает с ExitFailure 1. Я использую sqlite для постоянного.
Application.hs:49:44:
No instance for (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger
IO)
arising from a use of `runMigration'
Possible fix:
add an instance declaration for
(monad-logger-0.3.1:Control.Monad.Logger.MonadLogger IO)
In the second argument of `Database.Persist.Store.runPool', namely
`(runMigration migrateAll)'
In a stmt of a 'do' block:
Database.Persist.Store.runPool dbconf (runMigration migrateAll) p
In the expression:
do { manager <- newManager def;
s <- staticSite;
dbconf <- withYamlEnvironment
"config/sqlite.yml" (appEnv conf) Database.Persist.Store.loadConfig
>>= Database.Persist.Store.applyEnv;
p <- Database.Persist.Store.createPoolConfig
(dbconf :: PersistConfig);
.... }
Failed to install testProject-0.0.0
cabal.exe: Error: some packages failed to install:
testProject-0.0.0 failed during the building phase. The exception was:
ExitFailure 1
Я попытался выполнить следующие инструкции: http://www.yesodweb.com/book/scaffolding-and-the-site-template
Не удалось найти информацию об этой проблеме. Любые подсказки относительно того, что не хватает?
Ответы
Ответ 1
В сообщении об ошибке указано, что экземпляр MonadLogger IO
отсутствует. Проблема в том, что установленная версия monad-logger
слишком новая. monad-logger-0.2.4
содержит экземпляр, который вам нужен, monad-logger-0.3.0
и выше по-видимому, "т.
Решение:
Добавьте && < 0.3.0
в строку monad-logger
в файле cabal и снова cabal install --only-dependencies
.
(Если нет строки monad-logger
, добавьте ее как , monad-logger < 0.3.0
.
Ответ 2
Используйте одну из функций runFooLoggingT
из Control.Monad.Logger. В частности, там runNoLoggingT
.
Это, вероятно, гораздо лучшая идея, чем установка на старую версию библиотеки!
Ответ 3
Мне все еще нравится трансформаторы, поэтому
после ответа Колина, это очень быстрый способ полностью отключить ведение журнала:
import Control.Monad.Logger (MonadLogger, monadLoggerLog)
import Control.Applicative (pure)
instance MonadLogger IO where
monadLoggerLog _ _ _ = pure $ pure ()
В основном он повторяет экземпляр NoLoggingT
для MonadIO
.
Однако, как только вы получите это быстрое исправление на своей кодовой базе, вы должны перейти на страницу Monad Transformers в Haskell Wiki, поскольку я прямо сейчас; )
Ответ 4
FYI, я преодолел это, обернув значение, предоставленное withSqliteConn
в качестве аргумента конструктору NoLoggingT
, что позволило withSqliteConn
найти MonadLogger
где-то в стеке, и я развернул возвращенный результат с помощью runNoLoggingT
mainWithExplicitConnection2:: IO ()
mainWithExplicitConnection2 =
runNoLoggingT $ withSqliteConn ":memory:" $ \conn ->
NoLoggingT $ flip runSqlPersistM conn $ runMigration migrateAll