“在升级到Rails 4之后,没有这样的中间件可以插入:Rack :: Lock(RuntimeError)”

时间:2013-06-16 08:12:46

标签: ruby-on-rails rack ruby-on-rails-4

升级到Rails 4后出现以下错误:

.../ruby-1.9.3-p125/gems/actionpack-4.0.0.rc2/lib/action_dispatch/middleware/stack.rb:125:in 'assert_index': No such middleware to insert before: Rack::Lock (RuntimeError)

违规行是我的“remove slashes”机架重写规则:

config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  r301 %r{^/(.*)/$}, '/$1', :headers => {'Cache-Control' => 'public, max-age='+2.week.to_s}
end

有什么想法吗?

1 个答案:

答案 0 :(得分:40)

正如错误所示(“之前没有插入此类中间件”),问题在于您尝试之前插入的中间件(而不是中间件你正在尝试插入,这是我最初的假设。)

在Rails4中,默认启用线程,删除Rack::Lock

要查找替换项,可以从rails项目目录运行rake middleware,并查找堆栈开头附近的内容。我将选择Rack::Runtime,因为它在堆栈的早期,并且看起来非常标准。

所以重写配置现在是:

config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
  r301 %r{^/(.*)/$}, '/$1', :headers => {'Cache-Control' => 'public, max-age='+2.week.to_s}
end