标签: haskell-snap-framework

比较Haskell的Snap和Yesod Web框架

最近新闻中的两个Haskell网络框架是Yesod(0.8)和Snap(0.4).

很明显,Yesod目前支持的功能远远多于Snap.但是,我无法忍受Yesod用于其HTML,CSS和Javascript的语法.

所以,如果我选择使用Snap,我想了解我会失踪的内容.例如,看起来不像数据库支持那样.会议怎么样?其他特性?

haskell web-frameworks yesod haskell-snap-framework

231
推荐指数
4
解决办法
3万
查看次数

如何在生产中运行Snap haskell webapp?

我已经在我的生产Ubuntu服务器上安装了Snap/Haskell(在EC2上),并检出了我的项目 - 但我该如何运行它?

我的意思是,在本地,我从命令行运行它:

project-name -p 8000
Run Code Online (Sandbox Code Playgroud)

snap是否带有它自己的web服务器(它看起来像它),如果是这样,我如何配置它作为某种守护进程运行?

有小费吗?

编辑2:

维基上,他们说:

snap-server是一个HTTP服务器库,支持snap-core中定义的接口.

在这里,关于"你的haskell网络代码的部署/后端选项"的haskell wiki说Snap:

包括自己的服务器.请参阅Web /框架

如何?我如何运行它自己的服务器?如果我对编程感兴趣,为什么我必须知道该死的东西的部署...

编辑:相关问题:部署使用Snap Framework的Haskell代码

haskell haskell-snap-framework

29
推荐指数
3
解决办法
3736
查看次数

在Mac上安装Haskell软件包

我似乎无法在我的Mac上安装一些Haskell软件包(10.6.8).我第一次尝试了哈普斯塔克,它失败了,然后我尝试了Snap.

有时当我运行ghci时,我会遇到分段错误.

其他时候它的工作原理如下:

GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>
Run Code Online (Sandbox Code Playgroud)

在尝试获取Snap时:

....
....
....
Loading package vector-0.10.0.1 ... linking ... done.
Loading package zlib-0.5.4.0 ... linking ... done.
Loading package zlib-bindings-0.1.1.3 ... linking ... done.
Loading package zlib-enum-0.2.3 ... linking ... done.
Loading package snap-core-0.9.3.1 ... linking ... done.
Loading package snap-server-0.9.3.3 ... linking ... done.
Loading package …
Run Code Online (Sandbox Code Playgroud)

macos haskell ghci happstack haskell-snap-framework

28
推荐指数
6
解决办法
3万
查看次数

如何使用Snap检查客户端证书

我知道它很少使用,但是可以在Snap中访问客户端证书吗?

如果没有,是否可以使用不同的Web堆栈?

ssl haskell happstack haskell-snap-framework

26
推荐指数
1
解决办法
392
查看次数

捕捉教程和建议

任何人都可以向我推荐关于Snap或书籍的严肃教程吗?你能分享一下你对Snap的印象吗?我有网络编程的经验,但我开始学习Haskell,它很棒,所以我想用我最喜欢的语言写网站?

haskell haskell-snap-framework

17
推荐指数
1
解决办法
2768
查看次数

如何完全删除快照应用程序 (docker)

我犯了通过 Snap 安装 Docker 的错误...一旦我意识到 snap 没有在我的工作目录(在不同分区上)运行的权限,我将其删除。现在我通过apt-get安装后无法使用docker。

请帮忙。

我已经完成了,sudo snap remove docker但是当我sudo apt install docker运行 via 时docker,我得到bash: /snap/bin/docker: No such file or directory

ubuntu apt haskell-snap-framework docker

15
推荐指数
4
解决办法
1万
查看次数

键入从GHCJS客户端到Yesod/Snap/Servant的安全RPC调用示例

我有两个关于RPC调用的相关问题Yesod/Snap/Servant:

  1. 假设我在服务器上有一个函数,用Haskell编写,由GHC编译:

    add x y = x+y+42

怎么能:

  1. 我从客户端调用此函数(客户端也是用Haskell编写的,用它编译GHCJS),
  2. 在服务器上执行该功能,
  3. 将结果返回给客户端?

以类型安全的方式做所有这些吗?

例如,我想在客户端上写这样的东西:

main= putStrLn $ show $ add 2 3
Run Code Online (Sandbox Code Playgroud)

这样add函数就可以在服务器执行.

Yesod/Snap/Servant在客户端上使用服务器和GHCJS 进行此操作的最简单方法是什么?

2)同样,我想写一个"功能": getPhaseOfMoon :: IO Phase它在服务器上运行,我想以getPhaseOfMoon类型安全的方式从客户端调用.

所以我可以在客户端上写这个:

main= do 
   p<-getPhaseOfMoon
   putStrLn $ show p
   return ()
Run Code Online (Sandbox Code Playgroud)

哪一个

  1. 去服务器
  2. 服务器参考月相
  3. 服务器返回Phase客户端
  4. 客户端在JavaScript控制台中显示月相.

我怎么能用Yesod/Snap/Servant(服务器)+ GHCJS(客户端)做到这一点?

haskell yesod haskell-snap-framework transpiler ghcjs

12
推荐指数
0
解决办法
454
查看次数

如何修复 MxLinux 上的 snapd.socket 没有此类文件或目录错误?

我一直在尝试使用安装几个应用程序,sudo snap install <nameofapp> 但是每当我尝试这样做时,我总是会遇到相同的错误:

error: cannot communicate with server: Post http://localhost/v2/snaps/standard-notes: dial unix /run/snapd.socket: connect: no such file or directory

我在 MXLINUX 请帮忙

store haskell-snap-framework snapcraft

12
推荐指数
1
解决办法
4万
查看次数

在Haskell中,如何在Web客户端断开连接时中止计算

我有一个基于Haskell的Web服务,它执行一些计算,对于某些输入可能需要很长时间才能完成.("真的很长"这里意味着超过一分钟)

因为执行该计算会占用服务器上所有可用的CPU,所以我将传入的请求放在一个队列中(好吧,实际上是一个堆栈,原因与典型的客户端有关,但除了这一点之外)当它们到达并为它们提供服务时当前正在运行的计算结束.

我的问题是,客户端并不总是等待足够长的时间,有时会超时,断开连接并尝试使用不同的服务器(好吧,他们再次尝试并点击elb,通常会获得不同的实例).此外,由于外部因素,Web客户端偶尔要求的计算将会过时,Web客户端将被终止.

在那些情况下,我真的希望能够在我将下一个请求从堆栈中拉出并开始(昂贵的)计算之前检测到Web客户端已经消失.不幸的是,我使用snap的经验让我相信在该框架中无法询问"客户端的TCP连接是否仍然连接?" 我还没有找到任何涵盖"客户端断开连接"案例的其他Web框架的文档.

那么是否有一个Haskell Web框架,可以很容易地检测Web客户端是否已断开连接?或者失败了,是否有一个至少使它成为可能?

(我知道在所有情况下都可能无法绝对确定TCP客户端是否仍在那里而不向另一端发送数据;但是,当客户端实际向服务器发送RST数据包而服务器的框架没有让应用程序代码确定连接已经消失,这是一个问题)


顺便说一下,虽然有人可能怀疑warp的 onClose处理程序会让你这样做,但只有当响应准备好并写入客户端时才会触发,因此作为中止正在进行的计算的方法是无用的.似乎也无法访问已接受的套接字以便设置SO_KEEPALIVE或类似.(有一些方法可以访问初始侦听套接字,但不是接受的套接字)

haskell tcp haskell-snap-framework

11
推荐指数
1
解决办法
295
查看次数

具有可变数量子表格的消化函数(Snap/Heist)

我正在努力将一个站点从PHP移植到Snap w/Heist.我已经将一些更简单的形式移植到成功使用Digestive Functors,但现在我必须做一些需要使用子表单的棘手的形式.

此应用程序管理为零售商店生产传单,因此需要完成的任务之一是添加广告尺寸并在打印的传单上定义其物理尺寸.尺寸将根据页面类型(可由传单所有者配置)及其方向(只能由管理员控制)而有所不同.

PHP版本中的表单是什么样的

这种形式保证至少有3个单元格,最有可能有9个单元格(如上图所示的PHP版本),但理论上可以有无限数量.

这是我到目前为止维度子表单的内容:

data AdDimensions = AdDimensions
    { sizeId :: Int64
    , layoutId :: Int64
    , dimensions :: Maybe String
    }

adDimensionsForm :: Monad m => AdDimensions -> Form Text m AdDimensions
adDimensionsForm d = AdDimensions
    <$> "size_id" .: stringRead "Must be a number" (Just $ sizeId d)
    <*> "layout_id" .: stringRead "Must be a number" (Just $ layoutId d)
    <*> "dimensions" .: opionalString (dimensions d)
Run Code Online (Sandbox Code Playgroud)

表单定义感觉不太正确(也许我在这里完全错误的想法?). AdDimensions.dimensions应该是a Maybe String,因为在运行查询时从数据库返回时它将为null,以获取新广告大小的size_id/layout_id的所有可能组合的列表,但是从类似查询中它不会为null将在创建编辑表单时运行.字段本身是必需的(在数据库中ad_dimensions.dimensions设置not null). …

haskell haskell-snap-framework heist digestive-functors

10
推荐指数
2
解决办法
655
查看次数