什么';过滤后的真正的sinatra(ruby/rack)的最快方式是什么?

什么';过滤后的真正的sinatra(ruby/rack)的最快方式是什么?,ruby,performance,sinatra,callback,Ruby,Performance,Sinatra,Callback,好的,这是一个简单的任务。在我将html呈现给客户机之后,我希望使用来自请求的信息执行一个db调用 我之所以使用sinatra是因为它是一个轻量级的微框架,但实际上我喜欢ruby中的任何东西,如果它更快/更容易(机架?)。我只想获取url并根据url将客户端重定向到其他地方 那么,如何使用rack/sinatra真正的after_过滤器呢。我所说的after_filter是指将响应发送到客户端之后。还是说没有线程就无法完成 我分叉了sinatra并添加了after过滤器,但是没有办法刷新响应,甚

好的,这是一个简单的任务。在我将html呈现给客户机之后,我希望使用来自请求的信息执行一个db调用

我之所以使用sinatra是因为它是一个轻量级的微框架,但实际上我喜欢ruby中的任何东西,如果它更快/更容易(机架?)。我只想获取url并根据url将客户端重定向到其他地方

那么,如何使用rack/sinatra真正的after_过滤器呢。我所说的after_filter是指将响应发送到客户端之后。还是说没有线程就无法完成

我分叉了sinatra并添加了after过滤器,但是没有办法刷新响应,甚至发送假定为流文件(显然是二进制文件)的_数据也会等待after_过滤器

我看到了这个问题:但答案是针对rails的。我不确定它是否真的将响应刷新到客户端,然后允许随后进行处理

Rack::Callbacks有一些前后回调,但即使是那些看起来也会在响应发送到客户端之前运行的回调(添加注释):

所以我知道我可以用rake通过shell调用后台任务。但最好不要有太多。。。还有,但这是否有利于在不延迟响应的情况下执行单独的进程,或者它是否仍会使应用程序整体等待(我认为会)

我知道这是很多,但简而言之,它是一个简单的after_过滤器,在响应以ruby/sinatra/rack发送后真正运行


感谢您阅读或回答我的问题!:-)

修改了run_later端口到rails以实现此功能文件在此处可用:


该URL不起作用。我相信它已经更新到不再需要了!:-)是 啊Jimmy Schementi在版本1.0中将working after filters添加到Sinatra中(尽管我还没有验证),检查@not true的更改;Sinatra的
after
过滤器在路由之后,但在响应发送给用户之前运行(允许您最后一次修改响应)。感谢@Phrogz指出这一点!那么晚些时候sinatra_run_呢?
def call(env)
  @before.each {|c| c.call(env) }
  response = @app.call(env)
  @after.each {|c| c.call(env) }
  response 
  #i am guessing when this method returns then the response is sent to the client.
end