在Happstack中捕获异常



我得到了一个异常(使用序曲)。头在一个空列表上),使所有的HTTP请求之后返回一个502/505异常(happstack应用程序打印"HTTP请求失败:发送资源消失(管道破裂)"在stdout)。

我的问题是:在Happstack中控制异常的最佳实践是什么?我应该使用其他东西而不是simpleHTTP或简单地使用控制器函数上的Control.Exception.catch吗?

它目前看起来类似于速成班中的例子:

main :: IO ()
main = do
  hSetEncoding stdout utf8
  bracket (startSystemState (Proxy :: Proxy AppState)) createCheckpointAndShutdown $ 
         _control ->
           simpleHTTP nullConf { port = 1729 } $ do
             _ <- liftIO today
             decodeBody policy
             controller
    where
      createCheckpointAndShutdown control = do 
          createCheckpoint control
          shutdownSystem control

你说"服务器坏了"是什么意思?

如果您正在处理请求并执行head [],则应该只杀死正在处理该特定请求的线程。服务器本身应该继续运行并处理其他请求。

如果你找到了杀死整个服务器的方法,那就是一个bug, bug报告/测试用例将是非常感谢的。

如果只有当前线程被杀死,你想捕获那个异常,那么我认为你需要使用MonadPeelIO,

http://hackage.haskell.org/packages/archive/monad-peel/0.1/doc/html/Control-Monad-IO-Peel.html

有人提交了补丁,但是还没有被审核/合并

相关内容

  • 没有找到相关文章

最新更新