Snap和Groundhog分开工作,但在组合时(见下文),快速崩溃与核心转储(段故障或访问冲突)。这些已经合作但在ubuntu升级后问题就开始了。 (或者我做了一些我现在看不到的改变。)
快照无法使用wC <- getiCount
-line。如何解决这个问题?
基于评论的添加:现在有一些logError消息(SC
引用Snap.Core
)。当它崩溃时,它不会将任何消息记录到log/error.log
,也不会产生输出到www-page。如果注释了runGH
- 行,然后使用了下一行,则会按预期生成所有错误消息并输出到www页面。
第二次添加,插入一个单独的文件附加wFile
- 函数显示,程序崩溃:这表明runGH2是文件的最后一个添加。不知怎的,logError
在崩溃之前没有给出任何东西(我试过runStdoutLogging)。似乎该程序没有进入iCount
- 函数。
在Application.hs
runGH :: ConnectionManager b conn => DbPersist conn (NoLoggingT IO) a -> Handler b v a
runGH f = do
liftIO $ wFile "runGH"
withTop' id $ do
cm <- ask
SC.logError "runGH2"
liftIO $ wFile "runGH2"
liftIO $ runNoLoggingT (withConn (runDbPersist f) cm)
wFile txt = withFile "fmsg.txt" AppendMode $ \h -> hPutStrLn h ("log msg: " ++ txt)
并在Site.hs
initDBP :: (MonadIO m, MonadBaseControl IO m) => m (Pool Sqlite)
initDBP = withSqlitePool "mydb.sqlite" 5 $ \pconn -> return pconn
handleCntPage :: Handler App ({- AuthManager -} App) ()
handleCntPage = do
SC.logError "handleCntPage, 1st line"
writeText $ T.pack ("Soon we count number of db-items. " )
wC <- getiCount
SC.logError "handleCntPage, almost last line"
writeText $ T.pack ("we count number of db-items." ++ (show wC))
getiCount :: (ConnectionManager b conn, PersistBackend (DbPersist conn (NoLoggingT IO))) => Handler b v Int
getiCount = do
liftIO $ wFile "getiCount"
SC.logError "getiCount, 1st line"
i <- runGH $ iCount -- this does not work
liftIO $ wFile "getiCount2"
-- let i = 10 -- this works
SC.logError "getiCount, after call"
return i
和iCount
已单独测试,无需快照即可运行:
iCount :: (PersistBackend m) => m Int
iCount = do
liftIO $ wFile "iCount"
i <- countAll (undefined :: Items)
liftIO $ wFile "iCount2"
-- let i = 10 -- commenting the above line and using this one still crashes
return i
答案 0 :(得分:1)
我认为您使用的所有库都是兼容的。但是,有些软件包坏了。也许Ubuntu升级取代了你通过软件中心而不是cabal安装的Haskell软件包。 Cabal沙箱对这个特定项目有帮助,但删除所有包并重建它们也可以防止其他项目出现类似问题。
My cabal packages are FUBAR; how can I purge them and start over?