2015-08-06 4 views
0

Я начал немного изучать фреймворк 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.

+0

Просто для двойной проверки: выполняется ли 'cabal install -fdevelopment', как указано в [кратком руководстве] (http://snapframework.com/docs/quickstart), для вас? –

+0

один момент Мне нужно попробовать – epsilonhalbe

+0

Я не знаю, почему он строится, но, как я писал, я попытался использовать динамический динамик, тем не менее я попытался изменить Site.hs из недавно созданного приложения, а также изменил login.tpl (просто добавил слово), но он не перекомпилировался. - Чтобы не быть уверенным, что я буду дураком, я открыл сайт в хроме - и затем он перекомпилировался - ленивость - укусила меня (снова), перекомпиляция происходит только тогда, когда сайт запрашивается! - благодаря! – epsilonhalbe

ответ

4

Snap сам поставляется с этой возможностью встроенной. Предполагая, что вы инициализирован ваш проект с snap init, просто построить свой проект по

cabal install -fdevelopment 

и перезагрузит себя на лету по мере необходимости.

+0

Также смотрите эту [faq entry] (http://snapframework.com/faq#how-do-i-run-my-app-in-development-mode). – mightybyte

1

Ответ Даниила определенно правильный. Однако, если вы хотите перезагрузить, что не связано с изменениями кода, это также возможно. См. Пример this blog post.

+0

Спасибо - я придаю этому blogpost определенно некоторое внимание! – epsilonhalbe

Смежные вопросы