更改文件后自动重启 Snap 服务器
Automatically restart Snap server after changing a file
我已经开始学习一些关于 snap 框架的知识,我找到了一些关于 blaze snap 的教程并且想构建一个小的网络应用程序。
在 html 部分更改代码时的乏味之处在于我必须
Ctrl+C
现有的 Snap 服务器,然后 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)
并确保在相应的 *.cabal
文件中包含 snap-blaze
和 blaze-html
。
我还看到有一个包 snap-loader-dynamic
听起来很有希望,但我无法为所需的依赖项构建应用程序,并且 cabal 沙箱中的依赖项具有不同的哈希值。
我看到有 stack
最终取代了长 运行 中的 cabal
,但我没有足够的时间检查 stack
是否可以自动执行重建并重新启动。
如果我开发的环境相关:Linux (Mint) + cabal-sandbox.
Snap 本身内置了此功能。假设您使用 snap init
初始化您的项目,只需通过
构建您的项目
cabal install -fdevelopment
它会根据需要动态重新加载。
丹尼尔的回答绝对正确。但是,如果您想要不涉及代码更改的重新加载,那也是可能的。有关示例,请参阅 this blog post。
我已经开始学习一些关于 snap 框架的知识,我找到了一些关于 blaze snap 的教程并且想构建一个小的网络应用程序。
在 html 部分更改代码时的乏味之处在于我必须
Ctrl+C
现有的 Snap 服务器,然后 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)
并确保在相应的 *.cabal
文件中包含 snap-blaze
和 blaze-html
。
我还看到有一个包 snap-loader-dynamic
听起来很有希望,但我无法为所需的依赖项构建应用程序,并且 cabal 沙箱中的依赖项具有不同的哈希值。
我看到有 stack
最终取代了长 运行 中的 cabal
,但我没有足够的时间检查 stack
是否可以自动执行重建并重新启动。
如果我开发的环境相关:Linux (Mint) + cabal-sandbox.
Snap 本身内置了此功能。假设您使用 snap init
初始化您的项目,只需通过
cabal install -fdevelopment
它会根据需要动态重新加载。
丹尼尔的回答绝对正确。但是,如果您想要不涉及代码更改的重新加载,那也是可能的。有关示例,请参阅 this blog post。