中间件如何被删除



rack-timeout包含在Gemfile中,但我们只希望它作为生产中的中间件。因此,在初始化式中,我们有:

config.middleware.delete Rack::Timeout

检查该行前后将显示从数组中删除的机架超时。无论如何,请求仍然超时,并且在gem中快速'put '显示它确实是罪魁祸首。

这是因为在delete被调用之前中间件堆栈已经被构建了吗?还是在每个请求中都读取堆栈?如果是这样的话,问题是什么呢?

为什么不像下面这样呢?

group :production do
  gem "rack-timeout"
end

理论上,在初始化器中删除中间件应该在服务器重新启动后处理这个问题,假设您正在谈论在config/initializers/中放入一些东西。


做了更多的实验,并将其放入config/initializers/rack-timeout.rb:

if Rails.env.production?
  Rack::Timeout.timeout = 0.5
else
  Rails.configuration.middleware.delete Rack::Timeout
end

在脚手架控制器中:

sleep 1

在我重新启动开发服务器后,一切似乎都很酷(没有超时:D)。所以,可能只是一个坏变量。

我仍然认为使用仅用于生产的组是更好的解决方案。

运行在Rails 3.2.2与ruby 1.9.2-p290在OSX上

相关内容

  • 没有找到相关文章

最新更新