问题标签 [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.
haskell - 为什么这在 GHCi 中有效,但在 Scotty 中无效?
我正在尝试制作一个列出给定目录内容的网页,但我遇到了一个奇怪的问题:当我在 GHCi 中逐行运行代码时,代码会产生所需的输出,但是当它在运行中执行时Scotty 实例,它会产生不同的(错误的)输出。这是代码的相关部分:
(语句中的最后一行do
只是将其呈现为 html。这有效,但正确的输出永远不会到达该函数)当我在 GHCi 中运行此函数的每一行时,我得到以下输出:
这是我所期待的。但是当这个函数从 Scotty 运行时,称为 as serveDir "stuff/"
,我得到这个输出:
这里发生了什么?我知道 ActionM 是 MonadIO 的一个实例,否则将无法编译。我有点不知所措。有人可以对此有所了解或提供建议吗?其余代码可根据要求提供,但我可以说我正在使用 wai-middleware-static 来允许静态文件请求,并且其他函数中来自该目录的其他文件请求有效。
haskell - 如何防止 scotty 占用大量文本输出的内存?
Text
我有一个 Scotty/WAI 应用程序,其中一个端点发送从元素列表构建的大量输出。以下是相关代码:
据我了解Scotty 的文档,输出应该是懒惰地构建并通过网络发送,而不需要在内存中构建整个文本/字节串。然而,这不是我观察到的行为:当我调用这个端点时,服务器开始消耗内存,我推断它正在构建整个字符串,然后一次性发送它。
我错过了什么吗?
编辑 1:
我编写了一个doStream
函数,该函数应该一个接一个地发送生成的 BS 块:
但实际上它仍然在内存中构建整个输出......
编辑 2:
实际上,以这种方式流式传输效果很好。但是,服务器进程仍然会占用大量内存,这实际上可能在发送每个块时都可以进行垃圾回收。我将尝试更深入地分析内存使用情况,以了解这种消耗来自何处。
编辑 3:
我试图将堆限制为 2GB,但这会使进程崩溃。在整个转换过程中保留了一些记忆......
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 之外的其他墨盒类型,并且它们创建得很好。
haskell - 在 Scotty 应用程序终止后进行清理
我有一个监听 Unix 套接字的 Scotty 应用程序。我希望应用程序在退出时删除套接字(即当我键入Ctrl-时C),但我不确定如何完成此操作。我的main
功能看起来像
当我键入时Ctrl——函数未被调用——C这removeFile
似乎是 Scotty 框架没有或无法捕捉到的中断。有没有办法执行这样的清理操作?
haskell - 让每个 monad 转换器成为 MonadTrans 的实例真的是默认做法吗?
所以真实世界的 Haskell说:
每个 monad 转换器都是 MonadTrans 的一个实例
但我正在和Scotty一起玩,发现它的基本单子转换ScottyT
器不是MonadTrans
.
查看发行说明,似乎这是一个经过深思熟虑的设计决定:here。引用:
ScottyT 的 monad 参数已经解耦,导致 ScottyT 构造函数的类型发生变化。结果,ScottyT 不再是 MonadTrans 实例......
我希望你能理解我的困惑。尽管如此,我将尝试提出严格的问题:
- 为什么不希望 monad 转换器成为 的一个实例
MonadTrans
? - 您如何解释上述 ScottyT 设计的变化?
PS:我明白我可以定义一个MonadTrans ScottyT
自己的实例,但我应该吗?(链接回问题)
haskell - 如何使用 warp-tls 而不是 scotty 的 warp?
我需要使用 warp-tls 而不是普通的 warp 服务器来启动我的 scotty 应用程序,但运行 warp 似乎是在 scotty 的源代码中硬连线的。我错过了一些明显的东西吗?
haskell - Scotty 如何制作 Applicative 构造函数
您可能注意到代码的最后一部分使用应用函数来构造记录,有人可以解释为什么不应该像往常一样创建它吗?
html - Scotty + Html -> 如何将它们交织在一起?
如何在 Scotty 中使用 html 页面,包括html 模板?但不是通过 Blaze,因为我不喜欢用 haskell 代码描述它的结构。它认为我应该抢劫,但如何将它与 Scotty 纠缠在一起?