使用HAML的Rails HTTP流式传输

12

在rails的HAML项目中,使用HTTP流似乎存在问题。如果我改用ERB,则可以完美解决。显然,我不是唯一遇到这个问题的人。

stream放置在控制器顶部或在操作中使用render :stream => true均无效。

我如何让HAML和HTTP流高效地协同工作?

更新:我在gem页面上开了一个问题,在这里


我想这是因为HAML必须在向客户端发送任何内容之前呈现整个页面,这可能是一个设计问题。我没有把它发布为答案,因为我不确定,也没有时间立即检查。 - Romain
@Romain:谢谢您的意见。这也是我的猜测,即HAML不会将单独的文件转换为ERB,而实际上会等待整个视图被组装​​然后提供HTML。或者类似的东西。现在3.1已经发布并且流式传输可用,这将成为一个重大障碍。 - Julio Santos
1
你有没有尝试查看HAML和/或Rails是否已经有关于这个问题的错误报告?我想象修复HAML并不是不可能的(前提是我们对问题的假设都是正确的)。 - Romain
好主意。https://github.com/nex3/haml/issues/436 - Julio Santos
如果你正在寻找一个替代ERB用于HTTP流的工具,SLIM模板已经支持这个功能:http://www.rubydoc.info/gems/slim/frames#Streaming - Nick Urban
2个回答

2

这在HAML中尚未得到支持 (来源):

HTTP流是一种可能需要对核心Haml引擎进行大量修改的东西。即使在基本情况下让它工作也只是相当困难的,但是如果考虑诸如消耗空格的操作符之类的因素,它会变得更加困难。

理论上,我并不反对这种方法,但鉴于实现的难度,这并不是我优先考虑的事情。


1
Haml 的内部机制是在进行操作时写入缓冲区的。但是,Rails 传统上提供的模板语言“标准” API 是一个相当简单的进入和退出调用。我认为 Haml 目前还没有“流支持”,但这只是一个 API 问题,而不是其他任何问题。
我很好奇 Rails 是如何插入到 ERB 中进行此操作的。

https://github.com/rails/rails/blob/master/actionpack/lib/action_view/template/handlers/erb.rb#L61 - gunn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接