on master help sign in
Handle exceptions thrown by the application
cef41eeMichael Snoyman
Network/Wai/Handler/DevelServer.hs+8−3
@@ -6,6 +6,7 @@ module Network.Wai.Handler.DevelServer (run) where
6import Language.Haskell.Interpreter
6import Language.Haskell.Interpreter
7import Network.Wai
7import Network.Wai
8
8
9+import qualified Data.ByteString.Lazy.UTF8 as U
9import qualified Data.ByteString.Lazy.Char8 as L8
10import qualified Data.ByteString.Lazy.Char8 as L8
10import Network
11import Network
11 ( listenOn, accept, sClose, PortID(PortNumber), Socket
12 ( listenOn, accept, sClose, PortID(PortNumber), Socket
@@ -41,10 +42,14 @@ startApp queue withApp = do
41 case msession of
42 case msession of
42 Nothing -> return ()
43 Nothing -> return ()
43 Just (req, onRes) -> do
44 Just (req, onRes) -> do
44− res <- app req
45+ void $ forkIO $ (handle onErr $ app req) >>= onRes
45− -- FIXME exceptions?
46− onRes res
47 go app
46 go app
47+ onErr :: SomeException -> IO Response
48+ onErr e = return
49+ $ Response status500 [("Content-Type", "text/plain; charset=utf-8")]
50+ $ ResponseLBS $ U.fromString
51+ $ "Exception thrown while running application\n\n" ++ show e
52+ void x = x >> return ()
48
53
49fillApp :: String -> String -> M.MVar Queue -> IO ()
54fillApp :: String -> String -> M.MVar Queue -> IO ()
50fillApp modu func mqueue =
55fillApp modu func mqueue =
wai-handler-devel.cabal+9−7
@@ -21,13 +21,15 @@ Source-repository head
21 location: git://github.com/snoyberg/wai-handler-devel.git
21 location: git://github.com/snoyberg/wai-handler-devel.git
22
22
23Library
23Library
24− Build-Depends: base >= 3 && < 5,
24+ Build-Depends: base >= 3 && < 5
25− wai >= 0.2.1 && < 0.3,
25+ , wai >= 0.2.1 && < 0.3
26− wai-extra >= 0.2.3 && < 0.3,
26+ , wai-extra >= 0.2.3 && < 0.3
27− directory >= 1.0 && < 1.1,
27+ , directory >= 1.0 && < 1.1
28+ , sendfile >= 0.6 && < 0.8
28− network >= 2.2 && < 2.3,
29+ , network >= 2.2 && < 2.3
29− bytestring >= 0.9 && < 0.10,
30+ , bytestring >= 0.9 && < 0.10
30− hint >= 0.3.2.3 && < 0.4
31+ , hint >= 0.3.2.3 && < 0.4
32+ , utf8-string >= 0.3 && < 0.4
31 Exposed-modules: Network.Wai.Handler.DevelServer
33 Exposed-modules: Network.Wai.Handler.DevelServer
32 ghc-options: -Wall
34 ghc-options: -Wall
33
35