Haskell 斯纳普和土拨鼠停止了合作

Haskell 斯纳普和土拨鼠停止了合作,haskell,haskell-snap-framework,Haskell,Haskell Snap Framework,Snap和Groundhog单独工作,但组合使用时(见下文),Snap会因堆芯转储(段故障或访问冲突)而崩溃。这些已经一起工作了,但问题是在ubuntu升级后开始的。(或者我做了一些现在看不到的改变。) 快照在不使用wC m Int的情况下工作 iCount=do liftIO$wFile“iCount” 我认为您使用的所有库都是兼容的。然而,一些包裹被打破了。也许Ubuntu升级取代了您通过软件中心而不是cabal安装的Haskell软件包。Cabal sandbox将有助于此特定项目,但移除

Snap和Groundhog单独工作,但组合使用时(见下文),Snap会因堆芯转储(段故障或访问冲突)而崩溃。这些已经一起工作了,但问题是在ubuntu升级后开始的。(或者我做了一些现在看不到的改变。)

快照在不使用
wC m Int的情况下工作
iCount=do
liftIO$wFile“iCount”

我认为您使用的所有库都是兼容的。然而,一些包裹被打破了。也许Ubuntu升级取代了您通过软件中心而不是cabal安装的Haskell软件包。Cabal sandbox将有助于此特定项目,但移除所有包并重建它们也将防止其他项目出现类似问题


您可以在countAll和getiCount周围放置调试语句,并查看失败的地方。有时,在Haskell中,当依赖关系被破坏时,可能会发生这种情况。在这种情况下,重建一切,例如,在阴谋集团沙箱可以帮助。代码是用“cabal clean;cabal install-fdevelopment”编译的,接下来,我将尝试熟悉cabal-sandbox。您只重建了项目。在沙箱中,所有库也将重建。如果您将日志放在iCount中,我们可以看到countAll或runGH是否触发错误。现在通过单独的文件写入有更多日志信息。runGH函数似乎是这次问题的根源。。。iCount很容易单独测试,并且可以正常工作。关于沙盒:我的阴谋集团版本是1.16,所以沙盒将需要一些时间(我没有尝试直接从git构建东西,尽管一个介绍似乎是可以管理的)。现在沙盒体验显示了一些积极的东西:这就像预期的一样。移除沙盒后,它不会-也许我会从现在开始使用沙盒。如果你回答这个问题,例如“用沙盒检查你的libs”,我会马上接受。(这仍然留下了另一个问题,关于哪些lib不能一起工作——不管怎样,我现在对sandbox很满意。)好的,首先从我的ubuntu安装中删除所有ghc包,然后删除用户安装的cabal包。之后,使用ubuntu软件包管理器再次安装ghc、cabal安装和haskell平台。然后是来自git的较新的阴谋集团,然后是阴谋集团安装snap、groundhog、text-icu,可能还有其他一些软件包。现在,该计划按预期运行。我注意到,我的阴谋集团文件的项目是不好的,它指的是一些旧版本,从而建立旧的不想要的版本。我将不得不删除这些,然后再试一次,但以防现在一切似乎都好一点。
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)
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 :: (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