Serve static files from a Yesod app.
This is great for developming your application, but also for a dead-simple deployment. Caching headers are automatically taken care of.
If you are running a proxy server (like Apache or Nginx), you may want to have that server do the static serving instead.
In fact, in an ideal setup you'll serve your static files from a separate
domain name to save time on transmitting cookies. In that case, you may wish
to use urlRenderOverride
to redirect requests to this subsite to a
separate domain name.
- newtype Static = Static StaticSettings
- data StaticRoute = StaticRoute [Text] [(Text, Text)]
- static :: FilePath -> IO Static
- staticDevel :: FilePath -> IO Static
- embed :: FilePath -> Q Exp
- staticFiles :: FilePath -> Q [Dec]
- staticFilesList :: FilePath -> [FilePath] -> Q [Dec]
- publicFiles :: FilePath -> Q [Dec]
- base64md5 :: ByteString -> String
Subsite
data StaticRoute Source
StaticRoute [Text] [(Text, Text)] |
Smart constructor
static :: FilePath -> IO StaticSource
Default value of Static
for a given file folder.
Does not have index files or directory listings. Expects static files to *never* change
staticDevel :: FilePath -> IO StaticSource
like static, but checks to see if the file has changed
embed :: FilePath -> Q ExpSource
Produces a Static
based on embedding file contents in the executable at
compile time.
Template Haskell helpers
staticFiles :: FilePath -> Q [Dec]Source
This piece of Template Haskell will find all of the files in the given directory and create Haskell identifiers for them. For example, if you have the files "static/style.css" and "static/js/script.js", it will essentailly create:
style_css = StaticRoute ["style.css"] [] js_script_js = StaticRoute ["js/script.js"] []
staticFilesList :: FilePath -> [FilePath] -> Q [Dec]Source
Same as staticFiles
, but takes an explicit list of files to create
identifiers for. The files are given relative to the static folder. For
example, to get the files "staticjsjquery.js" and
"staticcssnormalize.css", you would use:
staticFilesList "static" ["js/jquery.js"], ["css/normalize.css"]]
This can be useful when you have a very large number of static files, but only need to refer to a few of them from Haskell.
publicFiles :: FilePath -> Q [Dec]Source
like staticFiles, but doesn't append an etag to the query string This will compile faster, but doesn't achieve as great of caching. The browser can avoid downloading the file, but it always needs to send a request with the etag value or the last-modified value to the server to see if its copy is up to dat
Hashing
base64md5 :: ByteString -> StringSource
md5-hashes the given lazy bytestring and returns the hash as base64url-encoded string.
This function returns the first 8 characters of the hash.