module Start where import Directory import Control.Applicative import Data.List import System.Process import System.FilePath import System.Exit import Control.Monad import Build import Utils start :: [String] -> IO () start _ = inKibro $ \dir name -> do let fcgi = "public" ./. (name++".fcgi") d <- doesFileExist fcgi if d then doStart dir name else do doing "Not built. Building" e <- doBuild dir name case e of ExitSuccess -> doStart dir name _ -> appError "cannot start" doStart :: String -> String -> IO () doStart dir name = do pid <- doesFileExist $ "app" ./. "lighttpd" ./. "lighttpd.pid" when (not pid) startLighty pid <- doesFileExist $ "app" ./. "fastcgi" ./. "fastcgi.pid" when (not pid) (startFastCGI dir name) startLighty = do doing "Starting lighttpd" r <- runCommand lighttpd >>= waitForProcess case r of ExitSuccess -> return () _ -> appError "unable to start lighttpd! \ \perhaps the port is already \ \in use. Do: kibro configure --port " where lighttpd = "lighttpd -f app/lighttpd/lighttpd.conf" startFastCGI dir name = do doing "Starting fastcgi process" doing fastcgi r <- runCommand fastcgi >>= waitForProcess case r of ExitSuccess -> return () _ -> appError "unable to start the fastcgi process! is spawn-fcgi installed?" where fastcgi = "spawn-fcgi -f " ++ fcgi ++ " -s " ++ sock ++ " -P " ++ pid fcgi = "public" ./. name ++ ".fcgi" sock = dir ./. "app" ./. "fastcgi" ./. name ++ ".sock" pid = "app" ./. "fastcgi" ./. "fastcgi.pid"