Snap和Groundhog停止了合作

时间:2013-12-27 16:31:17

标签: haskell haskell-snap-framework

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

1 个答案:

答案 0 :(得分:1)

我认为您使用的所有库都是兼容的。但是,有些软件包坏了。也许Ubuntu升级取代了你通过软件中心而不是cabal安装的Haskell软件包。 Cabal沙箱对这个特定项目有帮助,但删除所有包并重建它们也可以防止其他项目出现类似问题。

My cabal packages are FUBAR; how can I purge them and start over?