gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:08 24 4
gpt4 key购买 nike

好的,这是一个简单的任务。在我向客户端呈现 html 之后,我想使用请求中的信息执行数据库调用。

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

那么如何使用 rack/sinatra 作为一个真正的 after_filter。 after_filter 我的意思是在响应发送到客户端之后。还是没有线程就无法实现?

我 fork 了 sinatra 并在过滤器之后添加,但是没有办法刷新响应,即使是假设流式传输文件(显然是二进制文件)的 send_data 也在等待 after_filters。

我看过这个问题:Multipart-response-in-ruby但答案是铁轨。而且我不确定它是否真的将响应刷新到客户端,然后允许事后处理。

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但这是否适合在不延迟响应的情况下执行单独的进程,或者它仍然会让应用程序等待整个过程(我认为会)?

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

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

最佳答案

将 run_later 端口修改为 rails 以执行此操作文件可在此处获得:

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

关于ruby - 真正的 sinatra(ruby/rack) after_filter 最快的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/513491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com