21

升级到 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)

违规行是我的“删除斜杠”机架重写规则:

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

有任何想法吗?

4

1 回答 1

42

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

在 Rails4 中,默认情况下启用线程,删除Rack::Lock.

要找到替代品,您可以rake middleware从您的 rails 项目目录中运行,并在堆栈开头附近寻找一些东西。我会选择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
于 2013-06-16T08:12:46.220 回答