on master help sign in
Show error messages in browser with elm-server
3d570aaEvan Czaplicki
server/Server.hs+13−3
@@ -9,8 +9,10 @@ import Happstack.Server
9import Happstack.Server.Compression
9import Happstack.Server.Compression
10import System.Directory
10import System.Directory
11import System.Environment
11import System.Environment
12+import System.Exit
12import System.FilePath
13import System.FilePath
13import System.Process
14import System.Process
15+import GHC.IO.Handle
14import qualified Language.Elm as Elm
16import qualified Language.Elm as Elm
15import Paths_elm_server
17import Paths_elm_server
16
18
@@ -36,10 +38,18 @@ serveElm :: FilePath -> ServerPartT IO Response
36serveElm fp = do
38serveElm fp = do
37 guard (takeExtension fp == ".elm")
39 guard (takeExtension fp == ".elm")
38 let file = tail fp
40 let file = tail fp
39− liftIO $ rawSystem "elm" [ "--make" ,"--runtime=" ++ runtime
40− , "--cache-dir=elm-server-cache", file ]
41+ args = [ "--make" ,"--runtime=" ++ runtime, "--cache-dir=elm-server-cache", file ]
42+ (_, stdout, _, handle) <- liftIO $ createProcess $ (proc "elm" args) { std_out = CreatePipe }
43+ exitCode <- liftIO $ waitForProcess handle
41 liftIO $ removeDirectoryRecursive "elm-server-cache"
44 liftIO $ removeDirectoryRecursive "elm-server-cache"
45+ case (exitCode, stdout) of
46+ (ExitFailure _, Just out) ->
47+ do str <- liftIO $ hGetContents out
48+ badRequest $ toResponse str
49+ (ExitFailure _, Nothing) ->
50+ badRequest $ toResponse "See command line for error message."
51+ (ExitSuccess, _) ->
42− serveFile (asContentType "text/html") ("build" </> replaceExtension file "html")
52+ serveFile (asContentType "text/html") ("build" </> replaceExtension file "html")
43
53
44serveLib :: FilePath -> [Char] -> ServerPartT IO Response
54serveLib :: FilePath -> [Char] -> ServerPartT IO Response
45serveLib libLoc fp = do
55serveLib libLoc fp = do