问题标签 [scotty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
113 浏览

haskell - 为什么这在 GHCi 中有效,但在 Scotty 中无效?

我正在尝试制作一个列出给定目录内容的网页,但我遇到了一个奇怪的问题:当我在 GHCi 中逐行运行代码时,代码会产生所需的输出,但是当它在运行中执行时Scotty 实例,它会产生不同的(错误的)输出。这是代码的相关部分:

(语句中的最后一行do只是将其呈现为 html。这有效,但正确的输出永远不会到达该函数)当我在 GHCi 中运行此函数的每一行时,我得到以下输出:

这是我所期待的。但是当这个函数从 Scotty 运行时,称为 as serveDir "stuff/",我得到这个输出:

这里发生了什么?我知道 ActionM 是 MonadIO 的一个实例,否则将无法编译。我有点不知所措。有人可以对此有所了解或提供建议吗?其余代码可根据要求提供,但我可以说我正在使用 wai-middleware-static 来允许静态文件请求,并且其他函数中来自该目录的其他文件请求有效。

0 投票
1 回答
253 浏览

haskell - 如何防止 scotty 占用大量文本输出的内存?

Text我有一个 Scotty/WAI 应用程序,其中一个端点发送从元素列表构建的大量输出。以下是相关代码:

据我了解Scotty 的文档,输出应该是懒惰地构建并通过网络发送,而不需要在内存中构建整个文本/字节串。然而,这不是我观察到的行为:当我调用这个端点时,服务器开始消耗内存,我推断它正在构建整个字符串,然后一次性发送它。

我错过了什么吗?

编辑 1

我编写了一个doStream函数,该函数应该一个接一个地发送生成的 BS 块:

但实际上它仍然在内存中构建整个输出......

编辑 2

实际上,以这种方式流式传输效果很好。但是,服务器进程仍然会占用大量内存,这实际上可能在发送每个块时都可以进行垃圾回收。我将尝试更深入地分析内存使用情况,以了解这种消耗来自何处。

编辑 3

我试图将堆限制为 2GB,但这会使进程崩溃。在整个转换过程中保留了一些记忆......

0 投票
1 回答
205 浏览

haskell - 在 Openshift 中部署 Haskell(独立、yesod、snap...)失败

每当我尝试基于 Haskell 磁带创建应用程序时,都会导致以下错误的变体:

The initial build for the application failed: Shell command '/sbin/runuser -s /bin/sh 55c67c940c1e6694ac000017 -c "exec /usr/bin/runcon 'unconfined_u:system_r:openshift_t:s0:c5,c753' /bin/sh -c \"gear postreceive --init >> /tmp/initial-build.log 2>&1\""' returned an error. rc=137 .Last 10 kB of build output: The server is not running, nothing to stop. Repairing links for 1 deployments Building git ref 'master', commit 6b8beb4 Downloading the latest package list from hackage.haskell.org

这发生在 Openshift 集线器中的预定义墨盒,例如 Snap、Yesod、Scotty 以及 wiki ( https://wiki.haskell.org/Web/Cloud ) 中定义的墨盒。

我正在请求帮助,因为他的应用程序永远不会被创建,因此我无法检查日志,而且我无法从错误消息中获得太多收益。我尝试了除 Haskell 之外的其他墨盒类型,并且它们创建得很好。

0 投票
1 回答
82 浏览

haskell - 在 Scotty 应用程序终止后进行清理

我有一个监听 Unix 套接字的 Scotty 应用程序。我希望应用程序在退出时删除套接字(即当我键入Ctrl-时C),但我不确定如何完成此操作。我的main功能看起来像

当我键入时Ctrl——函数未被调用——CremoveFile似乎是 Scotty 框架没有或无法捕捉到的中断。有没有办法执行这样的清理操作?

0 投票
0 回答
332 浏览

haskell - Scotty 的用户注册

在学习 Haskell 时,我在Scotty框架中制作了一个小型 Web 应用程序。接下来我想添加用户注册。

注册应支持电子邮件/密码和 Google/FaceBook 登录选项。如果用户“现场”注册,他也应该能够使用 G/FB 帐户登录,反之亦然。

是否有一些标准/简单的方法可以通过Scotty实现这一目标?

我不太喜欢自己进行注册和身份验证,但我想只是一些关于如何实现标准电子邮件/密码注册/身份验证的指示会有所帮助。

0 投票
1 回答
209 浏览

haskell - 让每个 monad 转换器成为 MonadTrans 的实例真的是默认做法吗?

所以真实世界的 Haskell说:

每个 monad 转换器都是 MonadTrans 的一个实例

但我正在和Scotty一起玩,发现它的基本单子转换ScottyT不是MonadTrans.

查看发行说明,似乎这是一个经过深思熟虑的设计决定:here。引用:

ScottyT 的 monad 参数已经解耦,导致 ScottyT 构造函数的类型发生变化。结果,ScottyT 不再是 MonadTrans 实例......

我希望你能理解我的困惑。尽管如此,我将尝试提出严格的问题:

  • 为什么不希望 monad 转换器成为 的一个实例MonadTrans
  • 您如何解释上述 ScottyT 设计的变化?

PS:我明白我可以定义一个MonadTrans ScottyT自己的实例,但我应该吗?(链接回问题)

0 投票
1 回答
638 浏览

haskell - 如何使用 warp-tls 而不是 scotty 的 warp?

我需要使用 warp-tls 而不是普通的 warp 服务器来启动我的 scotty 应用程序,但运行 warp 似乎是在 scotty 的源代码中硬连线的。我错过了一些明显的东西吗?

0 投票
1 回答
93 浏览

haskell - Scotty 如何制作 Applicative 构造函数

您可能注意到代码的最后一部分使用应用函数来构造记录,有人可以解释为什么不应该像往常一样创建它吗?

0 投票
1 回答
42 浏览

haskell - 哪些因素决定了 Warp 应用程序中 settingsFork 的适当值?

Warp应用程序中,该settingsFork选项在设置数据类型上可用。这允许人们选择不同的前叉模型。何时应将其设置为默认值 ( ) 以外的值void . forkIOWithUnmask?做出此决定时应考虑哪些因素?(例如,IO 与 CPU 绑定/FFI 的使用)。

0 投票
1 回答
335 浏览

html - Scotty + Html -> 如何将它们交织在一起?

如何在 Scotty 中使用 html 页面,包括html 模板?但不是通过 Blaze,因为我不喜欢用 haskell 代码描述它的结构。它认为我应该抢劫,但如何将它与 Scotty 纠缠在一起?