2013-06-16 11 views
17

Dostaję następujący błąd po uaktualnieniu do szyn 4:„Nie ma takiego middleware wstawić wcześniej: Rack :: Lock (RuntimeError)” po uaktualnieniu do szyn 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)

Linia wykraczająca jest moja zasada "remove slashes" rack-rewrite:

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

Jakieś pomysły?

Odpowiedz

38

jako błąd sugeruje („No tak middleware do wstawienia przed”), problem jest z middleware próbujesz wstawić przed (a nie middleware próbujesz wstawić, który był moje początkowe założenie).

W Rails4 wątek jest domyślnie włączony, co usuwa Rack::Lock.

Aby znaleźć zamiennik, można uruchomić rake middleware z katalogu projektu szyn i poszukać czegoś w pobliżu początku stosu. Wybieram Rack::Runtime, ponieważ jest na początku stosu i wydaje się dość standardowy.

config więc przepisać to teraz:

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

Tylko jedna rzecz, która mylić mnie przez jakiś czas był 'grabie middleware' wracał pełną listę oczekiwanych pośredniczącego w tym' Rack :: Lock' i jeszcze mój rspec testy kończyły się niepowodzeniem z powodu braku znalezienia 'Rack :: Lock'. Ostatecznie zdałem sobie sprawę (poprzez bezpośrednie sprawdzenie pliku config.middleware), że rspec oczywiście nie ładował całego stosu oprogramowania pośredniego. Dlatego przeniosłem przepisywanie na 'config/environments/production.rb', ponieważ i tak nie testowałem tych przekierowań w rspec. –

+0

Dzięki za zrozumienie tego! Zasób, z którym łączysz się w swojej odpowiedzi, niestety nie istnieje. – Aaron

Powiązane problemy