2013-06-16 14 views
17

をレールにアップグレードした後、私は4をレールにアップグレードした後、次のエラーを取得しています:「の前に挿入する、そのようなミドルウェア:ラック::ロック(例外RuntimeError)は」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 

任意のアイデア?

答えて

38

エラーが(「前に挿入するそのようなミドルウェア」)示唆していないとして、あなたがた挿入、しようとしているミドルウェア前に(とではない、問題はあなたが挿入しようとしているミドルウェアであります私の最初の仮定)。

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 
+3

しばらくの間、私を混乱だけで一つのことをすくいmiddleware'はラック '含め期待ミドルウェアの完全なリストを返していました'だった:: Lock'、まだ私のRSpecの'Rack :: Lock'が見つからなかったためテストに失敗しました。 最後に、私は(直接config.middlewareを調べることによって)rspecがミドルウェアの完全なスタックをロードしていないことを認識しました。 したがって、私はこれらのリダイレクトをrspecでテストしないので、書き換えを 'config/environments/production.rb'に移動しました。 –

+0

これを把握していただきありがとうございます!答えにリンクしているリソースはもはや残念ながら存在しません。 – Aaron

関連する問題