Lun*_*Das 7 ruby-on-rails rack-middleware
我已经安装了rack-timeout gem并在初始化器中创建了rack_timeout.rb.我在Rack_timeout.rb中设置了Rack :: Timeout.service_timeout = 1.我想限制rack-timeout以在执行器超出控制器超时时停止执行api内部的控制器只能停止.我已经在lib里面创建了一个名为my_middleware.rb的自定义中间件.
class MyMiddleware < Rack::Timeout
def initialize(app, options = {})
@app = app
@exclude = options[:exclude]
end
def call(env)
if env['PATH_INFO'].include? "api"
super(env)
else
@app.call(env)
end
end
end
Run Code Online (Sandbox Code Playgroud)
配置/ development.rb
config.middleware.use "MyMiddleware"
Run Code Online (Sandbox Code Playgroud)
但它没有工作.机架超时是在发生超时时抛出异常.
小智 2
非常有趣的问题。在执行请求之外使请求超时并不是一个很好的做法,但似乎没有其他现成的解决方案。
我继续分叉rack_timeout,并根据请求路径添加过滤,稍微根据您的代码。
基本上,它Rack::Timeout随着Select类的扩展而扩展
class Select < Timeout
def call(env)
if exclude_or_any?(env) #checking for parameters passed on init
super(env)
else
@app.call(env)
end
end
...
end
Run Code Online (Sandbox Code Playgroud)
它使用原始的初始化方法并接受 2 个附加参数:
exclude: ["paths", "to", "exclude"]- 不要对来自包含所提供字符串的路径的请求运行超时。only: ["only_timeout_this"]- 仅处理来自这些路径的请求。我不建议定期使用它,因为最好将超时保持在您请求的任何进程内,但为了开发和简单性,它应该足够了。
存储库中提供了更多信息:
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |