真正的sinatra(ruby / rack)after_filter的最快方法是什么?

好的,这是一项简单的任务。 在我将html渲染到客户端后,我想用请求中的信息执行db调用。

我正在使用sinatra,因为它是一个轻量级的微框架,但是如果它更快/更容易(Rack?),我真的想用ruby做任何东西。 我只想获取url并根据url将客户端重定向到其他位置。

那么如何使用rack / sinatra进行真正的after_filter。 而after_filter我的意思是在响应发送给客户端之后。 或者,如果没有线程,这是不可行的?

我分叉sinatra并在filter之后添加,但是没有办法刷新响应,即使是send_data,假设流文件(显然是二进制文件)等待after_filters。

我已经看到了这个问题: 多部分响应在ruby中,但答案是针对rails。 我不确定它是否真的刷新了对客户端的响应,然后允许后续处理。

Rack :: Callbacks有一些回调之前和之后,但即便看起来它们会在响应被发送到客户端之前运行这里的Rack :: Callbacks实现(添加注释):

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 

所以我知道我可以用rake通过shell调用后台任务。 但是没有太多也是好的…还有NeverBlock但是对于执行一个单独的进程而不延迟响应是好的还是它仍然会使应用程序等待整体(我认为它会)?

我知道这很多,但简而言之,简单的after_filter在ruby / sinatra / rack中发送响应之后真正运行。

感谢您阅读或回答我的问题! 🙂

修改了run_later端口到rails来执行文件可用的技巧:

http://github.com/pmamediagroup/sinatra_run_later/tree/master