我得到了一个异常(使用序曲)。头在一个空列表上),使所有的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有人提交了补丁,但是还没有被审核/合并