我得到了一个异常(在一个空列表上使用了Prelude.head ),这使得之后的所有http-request都返回一个502/505异常( happstack应用程序在标准输出中打印"HTTP request failed with: send resource with (Broken )“)。
我的问题是:在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发布于 2011-10-12 05:56:52
你说的“服务器宕机”是什么意思?
如果您正在处理一个请求并执行head [],那么这应该只会杀死正在处理该特定请求的线程。服务器本身应该继续运行并处理其他请求。
如果你已经找到了杀死整个服务器的方法,那就是bug和bug报告/测试案例。
如果只终止当前线程,并且您希望捕获该异常,那么我认为您需要使用MonadPeelIO,
http://hackage.haskell.org/packages/archive/monad-peel/0.1/doc/html/Control-Monad-IO-Peel.html
有人已经为此提交了补丁,但它还没有被审查/合并。
https://stackoverflow.com/questions/7732400
复制相似问题