【问题标题】:Is it possible to execute a method after sending a response back to the browser in Rails?在 Rails 中将响应发送回浏览器后是否可以执行方法?
【发布时间】:2015-10-23 16:57:52
【问题描述】:

我在 Rails 中将响应发送回客户端后尝试运行一个操作。是否可以在没有后台工作人员或创建新线程的情况下做到这一点?

我查看了 after_filter 回调,但似乎这只允许您在呈现视图/响应之前执行代码。

谢谢

【问题讨论】:

  • 请更新您的帖子,描述您实际想要完成的工作。

标签: ruby-on-rails ruby callback


【解决方案1】:

简短回答:不,这是不可能的。您必须使用线程或某种延迟作业框架(SidekiqResque 等)。

长答案:您实际上可以使用 ActionController::Live 来控制您的响应“刷新”到客户端的时刻。

来自docs的修改示例:

class MyController < ActionController::Base
  include ActionController::Live

  def stream
    begin
      response.headers['Content-Type'] = 'text/event-stream'
      100.times {
        response.stream.write "hello world\n"
        sleep 1
      }
    ensure
      response.stream.close
    end
    do_my_after_response_job
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多