Rails / Mongrel 中的流响应

发布于 2024-09-06 19:23:51 字数 553 浏览 4 评论 0 原文

我正在尝试在 Rails 应用程序中发送流式响应,特别是使用 multipart/x-mixed-replace 内容类型。据我所知,Rails 不支持流式响应,因为容器在向客户端发送任何内容之前会尝试缓冲并确定响应正文的长度。

顺便说一句,我们正在使用 Mongrel 部署 Rails 应用程序,看起来像 自定义 Mongrel 处理程序可以很好地传输数据,甚至可以与 Rails 应用程序很好地配合。我已经能够创建一个自定义处理程序,但我不知道如何让它与 Rails 应用程序一起工作。

例如,我希望对 URI /foo.* 的所有请求都转到自定义处理程序,而所有其他请求都由 Rails 处理。有人可以建议如何实现这一点吗?我似乎无法复制上面链接文章的结果。或者是否有更简单的方法让 Rails 处理程序生成开放式流式响应?

I'm trying to send a streaming response in a Rails application, specifically using the multipart/x-mixed-replace content type. As far as I can tell, streaming responses are not supported by Rails since the container tries to buffer and determine the length of the response body before sending anything to the client.

Incidentally, we are deploying our Rails app with Mongrel, and it seems like custom Mongrel handlers can stream data fine and even play nice with Rails apps. I've been able to create a custom handler but I can't figure out how to get it to work along-side the Rails app.

For example, I would like all requests to the URI /foo.* to go the custom handler and all others to be handled by Rails. Can someone advise how to make this happen? I can't seem to replicate the results from the linked article above. Or is there an easier way to get a Rails handler to produce an open-ended, streaming response?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尐籹人 2024-09-13 19:23:51

罪魁祸首是 OS X 上的虚假杂种安装。使用 链接文章 使用如下简单的处理程序:

# foo_handler.rb
class FooHandler < Mongrel::HttpHandler
  # def process(req, res); streaming_impl; end 
end
# Usage: mongrel_handler start -S foo_handler.rb
uri "/foo", :handler => FooHandler.new

The culprit was a bogus mongrel install on OS X. A proper install works fine using guidance from the linked article using a simple handler like below:

# foo_handler.rb
class FooHandler < Mongrel::HttpHandler
  # def process(req, res); streaming_impl; end 
end
# Usage: mongrel_handler start -S foo_handler.rb
uri "/foo", :handler => FooHandler.new
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文