"Нет такого промежуточного программного обеспечения для вставки до: Rack:: Lock (RuntimeError)" после обновления до 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)

Оскорбительная строка - это мой удалить слэши" правило перезаписи:

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

Любые идеи?

Ответы

Ответ 1

Как показывает ошибка ( "Нет такого промежуточного программного обеспечения для вставки раньше" ), проблема связана с промежуточным программным обеспечением, которое вы пытаетесь вставить до (а не с промежуточным программным обеспечением, которое вы пытаетесь вставить, которое было мое первоначальное предположение).

В 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