1

特定のリクエスト(request.path == "/hi")でミドルウェアを(config.ruの)スタックに追加/追加しようとしています

私はRack::Builderでそれをやろうとしていました

しかし、私はそれに失敗しているようです。

Rack::Builder.new do
  use added_middleware1
  use added_middleware2
end.call(@env) if @request.path == "/something"

それが私の問題を明確にするかどうかはわかりません。

4

2 に答える 2

1

変数は@request、実際のリクエストが発生しているときにのみ使用できるはずですが、投稿したコードは、サーバーの起動時の構成時に実行される可能性があります。Rack::Builder ドキュメントの最初のページに、あなたが望むようなことをする方法を示すサンプルコードがあります:

app = Rack::Builder.new {
   use Rack::CommonLogger
   use Rack::ShowExceptions
   map "/lobster" do
     use Rack::Lint
     run Rack::Lobster.new
   end
 }
于 2012-10-02T23:13:14.543 に答える
0

スタックは次のようになります。

use CommonMiddleware
map '/something' do
  use SpecialMiddleware
  run TheApp.new
end
map '/' do
  run TheApp.new
end

あるいは、リクエストパスを見て、必要に応じて他の特別なミドルウェアを実行するミドルウェアを作成することもできます - そのためのラッパーのようなものです。機械は次のようになります。

def initialize app, special_middleware
  @app, @special_middleware = app, special_middleware
end

def call env
  if route_matches?(env)
    @special_middleware.new(@app).call(env) # assumes special_middleware initializer takes no extra parameters
  else
    @app.call(env)
  end
end

def route_matches? env
  # examine the rack environment hash, return true or false
end

そして、それを使用するための構成は次のようになります。

use RouteMatchingMiddleware, SpecialMiddleware
run TheApp.new
于 2012-10-03T01:34:41.650 に答える