diff --git a/yesod-bin/Devel.hs b/yesod-bin/Devel.hs index cb4d0ce1..7319543f 100644 --- a/yesod-bin/Devel.hs +++ b/yesod-bin/Devel.hs @@ -108,6 +108,7 @@ data DevelOpts = DevelOpts , failHook :: Maybe String , buildDir :: Maybe String , develPort :: Int + , develTlsPort :: Int , proxyTimeout :: Int , useReverseProxy :: Bool , terminateWith :: DevelTermOpt @@ -117,7 +118,20 @@ getBuildDir :: DevelOpts -> String getBuildDir opts = fromMaybe "dist" (buildDir opts) defaultDevelOpts :: DevelOpts -defaultDevelOpts = DevelOpts False False False (-1) Nothing Nothing Nothing 3000 10 True TerminateOnEnter +defaultDevelOpts = DevelOpts + { isCabalDev = False + , forceCabal = False + , verbose = False + , eventTimeout = -1 + , successHook = Nothing + , failHook = Nothing + , buildDir = Nothing + , develPort = 3000 + , develTlsPort = 3443 + , proxyTimeout = 10 + , useReverseProxy = True + , terminateWith = TerminateOnEnter + } cabalProgram :: DevelOpts -> FilePath cabalProgram opts | isCabalDev opts = "cabal-dev" @@ -146,8 +160,8 @@ reverseProxy opts iappPort = do ] refreshHtml - let runProxy = - run (develPort opts) $ waiProxyToSettings + let runProxy port = + run port $ waiProxyToSettings (const $ do appPort <- liftIO $ I.readIORef iappPort return $ @@ -161,13 +175,14 @@ reverseProxy opts iappPort = do else Just (1000000 * proxyTimeout opts) } manager - loop runProxy `Ex.onException` exitFailure + _ <- forkIO $ loop "https" (runProxy $ develTlsPort opts) `Ex.onException` exitFailure + loop "http" (runProxy $ develPort opts) `Ex.onException` exitFailure where - loop proxy = forever $ do + loop label proxy = forever $ do void proxy - putStrLn "Reverse proxy stopped, but it shouldn't" + putStrLn $ "Reverse proxy stopped, but it shouldn't: " ++ label threadDelay 1000000 - putStrLn "Restarting reverse proxy" + putStrLn $ "Restarting reverse proxy: " ++ label checkPort :: Int -> IO Bool checkPort p = do diff --git a/yesod-bin/main.hs b/yesod-bin/main.hs index 8ecfca70..a241c262 100755 --- a/yesod-bin/main.hs +++ b/yesod-bin/main.hs @@ -54,6 +54,7 @@ data Command = Init { _initBare :: Bool } , develIgnore :: [String] , develExtraArgs :: [String] , _develPort :: Int + , _develTlsPort :: Int , _proxyTimeout :: Int , _noReverseProxy :: Bool , _interruptOnly :: Bool @@ -107,13 +108,21 @@ main = do Version -> putStrLn ("yesod-bin version: " ++ showVersion Paths_yesod_bin.version) AddHandler{..} -> addHandler addHandlerRoute addHandlerPattern addHandlerMethods Test -> cabalTest cabal - Devel{..} -> devel (DevelOpts - (optCabalPgm o == CabalDev) _develDisableApi (optVerbose o) - _develRescan _develSuccessHook _develFailHook - _develBuildDir _develPort _proxyTimeout - (not _noReverseProxy) - (if _interruptOnly then TerminateOnlyInterrupt else TerminateOnEnter ) - ) develExtraArgs + Devel{..} -> let develOpts = DevelOpts + { isCabalDev = optCabalPgm o == CabalDev + , forceCabal = _develDisableApi + , verbose = optVerbose o + , eventTimeout = _develRescan + , successHook = _develSuccessHook + , failHook = _develFailHook + , buildDir = _develBuildDir + , develPort = _develPort + , develTlsPort = _develTlsPort + , proxyTimeout = _proxyTimeout + , useReverseProxy = not _noReverseProxy + , terminateWith = if _interruptOnly then TerminateOnlyInterrupt else TerminateOnEnter + } + in devel develOpts develExtraArgs where cabalTest cabal = do touch' _ <- cabal ["configure", "--enable-tests", "-flibrary-only"] @@ -178,6 +187,8 @@ develOptions = Devel <$> switch ( long "disable-api" <> short 'd' <*> extraCabalArgs <*> option auto ( long "port" <> short 'p' <> value 3000 <> metavar "N" <> help "Devel server listening port" ) + <*> option auto ( long "tls-port" <> short 'q' <> value 3443 <> metavar "N" + <> help "Devel server listening port (tls)" ) <*> option auto ( long "proxy-timeout" <> short 'x' <> value 0 <> metavar "N" <> help "Devel server timeout before returning 'not ready' message (in seconds, 0 for none)" ) <*> switch ( long "disable-reverse-proxy" <> short 'n'