Я начал немного изучать фреймворк snap, я нашел учебник по blaze snap и хочу создать небольшое веб-приложение.Автоматический перезапуск Snap-сервера после смены файла
Скучная вещь при смене кода в разделе HTML является то, что я должен Ctrl+C
существующий сервер мгновенного, а затем cabal run
перезапустить его снова есть более простой способ сделать это.
Я нашел следующую утилиту watchr, которая позволяет запускать команду после изменения определенного файла - что определенно полезно, но я не совсем знаю, как применить его в этой ситуации.
Получить минимальный рабочий пример - использовать команду snap init barebone
и подставит src/Main.hs
с
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad (forM_)
import Control.Applicative ((<|>))
import Snap.Core
import Snap.Util.FileServe
import Snap.Http.Server
import Snap.Blaze (blaze)
import qualified Data.Text as T
import qualified Text.Blaze.Html5 as H
main :: IO()
main = quickHttpServe site
site :: Snap()
site =
ifTop testHandler <|>
dir "static" (serveDirectory ".")
testHandler :: Snap()
testHandler = blaze $ H.docTypeHtml $
do H.head $ H.title "SnaptestBlaze"
H.body $ do H.p "Blaze makes Html"
H.ul $ forM_ [1..10::Int] (H.li . H.toHtml)
и убедитесь, что у snap-blaze
и blaze-html
в соответствующем *.cabal
файле.
Я также видел, что есть пакет snap-loader-dynamic
, который звучит многообещающе, но я не мог создать приложение для необходимых зависимостей, а зависимости в изолированной песочнице cabal имели разные значения хэш-функции.
Я видел, что существует stack
в конечном итоге заменить cabal
в долгосрочной перспективе, но у меня не было достаточно времени, чтобы проверить погоду stack
могут сделать автоматическое восстановление & перезагрузки.
Если среда, в которой я развиваюсь, актуальна: Linux (Mint) + cabal-sandbox.
Просто для двойной проверки: выполняется ли 'cabal install -fdevelopment', как указано в [кратком руководстве] (http://snapframework.com/docs/quickstart), для вас? –
один момент Мне нужно попробовать – epsilonhalbe
Я не знаю, почему он строится, но, как я писал, я попытался использовать динамический динамик, тем не менее я попытался изменить Site.hs из недавно созданного приложения, а также изменил login.tpl (просто добавил слово), но он не перекомпилировался. - Чтобы не быть уверенным, что я буду дураком, я открыл сайт в хроме - и затем он перекомпилировался - ленивость - укусила меня (снова), перекомпиляция происходит только тогда, когда сайт запрашивается! - благодаря! – epsilonhalbe