web: production build now has all web content embedded, dev build uses ./static (#63)

This commit is contained in:
Simon Michael 2011-09-12 23:30:29 +00:00
parent c7c67efc1c
commit 4c52dd5b76
19 changed files with 13 additions and 104 deletions

View File

@ -1 +0,0 @@
0.15.3

View File

@ -5,7 +5,6 @@ Re-export the modules of the hledger-web program.
module Hledger.Web (
module Hledger.Web.App,
module Hledger.Web.AppRun,
module Hledger.Web.EmbeddedFiles,
module Hledger.Web.Handlers,
module Hledger.Web.Options,
module Hledger.Web.Settings,
@ -17,7 +16,6 @@ import Test.HUnit
import Hledger.Web.App
import Hledger.Web.AppRun
import Hledger.Web.EmbeddedFiles
import Hledger.Web.Handlers
import Hledger.Web.Options
import Hledger.Web.Settings

View File

@ -12,12 +12,10 @@ where
import Data.Dynamic (Dynamic, toDyn)
import Network.Wai (Application)
import Network.Wai.Middleware.Debug (debugHandle)
import System.IO.Storage (withStore, putValue)
import Yesod.Logger (makeLogger, flushLogger, Logger, logLazyText, logString)
import Yesod.Static
import Hledger
import Hledger.Cli
import Hledger.Web.App
import Hledger.Web.Handlers
import Hledger.Web.Options
@ -28,9 +26,6 @@ import Hledger.Web.Settings
-- the comments there for more details.
mkYesodDispatch "App" resourcesApp
-- withApp :: App -> (Application -> IO a) -> IO a
-- withApp a f = toWaiApp a >>= f
-- This function allocates resources (such as a database connection pool),
-- performs initialization and creates a WAI application. This is also the
-- place to put your migrate statements to have automatic database
@ -38,30 +33,20 @@ mkYesodDispatch "App" resourcesApp
withApp :: AppConfig -> Logger -> (Application -> IO a) -> IO a
withApp conf logger f = do
#ifdef PRODUCTION
s <- static Hledger.Web.Settings.staticDir
putStrLn $ "Production mode, using embedded web files"
let s = $(embed Hledger.Web.Settings.staticDir)
#else
putStrLn $ "Not in production mode, using web files from " ++ Hledger.Web.Settings.staticDir ++ "/"
s <- staticDevel Hledger.Web.Settings.staticDir
#endif
let h = App {settings=conf
let a = App {settings=conf
,getLogger=logger
,getStatic=s
,appOpts=defwebopts
,appArgs=[]
,appJournal=nulljournal
}
toWaiApp h >>= f
-- withDevelApp :: Dynamic
-- withDevelApp = do
-- s <- static Hledger.Web.Settings.staticdir
-- let a = App{
-- getStatic=s
-- ,appRoot=Hledger.Web.Settings.defapproot
-- ,appOpts=defwebopts
-- ,appArgs=[]
-- ,appJournal=nulljournal
-- }
-- return $ toDyn (withApp a :: (Application -> IO ()) -> IO ())
}
toWaiApp a >>= f
-- for yesod devel
withDevelAppPort :: Dynamic
@ -78,21 +63,3 @@ withDevelAppPort =
flushLogger logger
where
logHandle logger msg = logLazyText logger msg >> flushLogger logger
-- -- Called by wai-handler-devel.
-- -- Eg: cabal-dev/bin/wai-handler-devel 5001 AppRun withWaiHandlerDevelApp
-- withWaiHandlerDevelApp :: (Application -> IO ()) -> IO ()
-- withWaiHandlerDevelApp func = do
-- let f = "./test.journal"
-- ej <- readJournalFile Nothing f
-- let Right j = ej
-- let a = App{
-- getStatic=static Hledger.Web.Settings.staticdir
-- ,appRoot="http://localhost:5002"
-- ,appOpts=defwebopts{cliopts_=defcliopts{file_=Just f}}
-- ,appArgs=[]
-- ,appJournal=j
-- }
-- withStore "hledger" $ do
-- putValue "hledger" "journal" j
-- withApp a func

View File

@ -1,46 +0,0 @@
{-# LANGUAGE TemplateHaskell #-}
{-|
Support files (static files and templates) used by the web app are
embedded in this module at compile time. Since hamlet can not easily use
these directly, we provide a way to write them out to the filesystem at
startup, when needed. This simplifies installation for end-users, and
customisation too.
-}
module Hledger.Web.EmbeddedFiles
(
files
,createFilesIfMissing
)
where
import Control.Monad
import qualified Data.ByteString as B
import Data.FileEmbed (embedDir)
import System.Directory
import System.FilePath
import Hledger.Web.Settings (datadir)
-- | An embedded copy of all files below the the hledger-web data
-- directory (@.hledger\/web\/@) at compile time, as (FilePath,ByteString)
-- pairs.
files :: [(FilePath, B.ByteString)]
files = $(embedDir datadir)
-- | If the hledger-web data directory (@.hledger\/web\/@) does not exist in
-- the current directory, create and fill it with the web app support
-- files (templates, stylesheets, images etc.) Returns True if the
-- directory was missing.
createFilesIfMissing :: IO Bool
createFilesIfMissing = do
exists <- doesDirectoryExist datadir
if exists
then return False
else do
createDirectoryIfMissing True datadir
setCurrentDirectory datadir
forM_ files $ \(f,d) -> do
createDirectoryIfMissing True $ takeDirectory f
B.writeFile f d
return True

View File

@ -22,7 +22,7 @@ module Hledger.Web.Settings
, defbaseurl
, hledgerorgurl
, manualurl
, datadir
-- , datadir
) where
@ -109,7 +109,8 @@ staticDir :: FilePath
staticDir = datadir++"static"
datadir :: FilePath
datadir = "./.hledger/web/"
datadir = "./"
-- datadir = "./.hledger/web/"
-- | The base URL for your static files. As you can see by the default
-- value, this can simply be "static" appended to your application root.

View File

@ -22,7 +22,6 @@ cabal-version: >= 1.6
build-type: Simple
extra-tmp-files:
extra-source-files:
-- included via hamletFile/EmbeddedFiles.hs since yesod needs the paths at compile-time
-- data-dir:
-- data-files:
@ -51,7 +50,6 @@ executable hledger-web
Hledger.Web
Hledger.Web.App
Hledger.Web.AppRun
Hledger.Web.EmbeddedFiles
Hledger.Web.Options
Hledger.Web.Settings
Hledger.Web.StaticFiles
@ -105,7 +103,6 @@ library
other-modules:
Hledger.Web
Hledger.Web.App
Hledger.Web.EmbeddedFiles
Hledger.Web.Options
Hledger.Web.Settings
Hledger.Web.StaticFiles

View File

@ -54,17 +54,10 @@ withJournalDo' opts cmd = do
-- | The web command.
web :: WebOpts -> Journal -> IO ()
web opts j = do
created <- createFilesIfMissing
if created
then do
putStrLn $ "Installing support files in "++datadir++" - done, please run again."
exitFailure
else do
putStrLn $ "Running self-tests..."
runTestsOrExit $ cliopts_ opts
putStrLn $ "Using support files in "++datadir
-- unless (debug_ $ cliopts_ opts) $ forkIO (browser baseurl) >> return ()
server (base_url_ opts) (port_ opts) opts j
putStrLn $ "Running self-tests..."
runTestsOrExit $ cliopts_ opts
-- unless (debug_ $ cliopts_ opts) $ forkIO (browser baseurl) >> return ()
server (base_url_ opts) (port_ opts) opts j
-- browser :: String -> IO ()
-- browser baseurl = do

View File

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 309 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB