更改文件后自动重新启动Snap服务器

时间:2015-08-06 22:08:12

标签: haskell haskell-snap-framework

我已经开始学习一些关于snap框架的知识,我找到了一些关于blaze snap的教程,并希望构建一个小的web-app。

在更改html部分中的代码时,单调乏味的是我必须这样做 Ctrl+C现有的Snap服务器,然后cabal run重新启动它是一种更简单的方法。

我找到了以下util 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是否可以进行自动重建&amp;重新启动。

如果我正在开发的环境是相关的:Linux(Mint)+ cabal-sandbox。

2 个答案:

答案 0 :(得分:4)

Snap本身附带此功能。假设您使用snap init初始化项目,只需按

构建项目
cabal install -fdevelopment

它会在必要时动态重新加载。

答案 1 :(得分:1)

丹尼尔的回答绝对是正确的。但是,如果您想要重新加载不涉及代码更改,那也是可能的。有关示例,请参阅this blog post