Ruby Freaks Lounge

第25回Rackとは何か(3)ミドルウェアのすすめ


RackRackRack使Rack


Rack

WebURLCookie





Rack

newRack


neco_filter.rb
neco_filter.rb
# coding: utf-8

class NecoFilter
  def initialize(app)
    @app = app
  end

  def call(env)
    res = @app.call(env)
    res[2].each do |body|
      body.gsub!(/!|?|。|、/) {『にゃ#{$&}』}
    end
    res
  end
end

config.ru
# config: utf-8

require 'simple_app'
require 'neco_filter'

use NecoFilter
run SimpleApp.new

rackupSimpleAppNecoFilter

ApacheeNginx使

RackRackRack使使

Rack使RackWebRackRamazeSinatra使RackNecoFilterSinatra使

Web

Rackconfig.ru
# config: utf-8

require 'simple_app'
require 'neco_filter'

run NecoFilter.new(SimpleApp.new)

useRack::BuilderDSLnewHandlernewRackuse使Rack::URLMap

config.ruRack::Builder使CGI
use MiddlewareA
use MiddlewareB
run App.new


Rack::Handler::CGI.run MiddlewareA.new( MiddlewareB.new( App.new ) )

Rack::URLMap


config.ru/aMiddlewareA  MiddlewareB  Rack::URLMap  MiddlewareC  AppA /b MiddlewareA  MiddlewareB  Rack::URLMap  MiddlewareD  AppB 
# ここでuseしたミドルウェアはURLMapより前に処理を行なう
use MiddlewareA
use MiddlewareB

map '/a' do
  # ここでuseしたミドルウェアは
  # そのパスへのリクエストの時だけ処理を行なう
  use MiddlewareC
  run AppA.new
end

map '/b' do
  use MiddlewareD
  run AppB.new
end

Rack::Builder使
MiddlewareA.new(
  MiddlewareB.new(
    Rack::URLMap.new(
      '/a' => MiddlewareC.new( AppA.new ),
      '/b' => MiddlewareD.new( AppB.new ),
    )
  )
)

URLMaprackupRack::Builder

便


Rack

POSTDELETEPUTRack::MethodOverrideRack::StaticgzipRack::DeflaterWeb使

Rack沿Rack::LintRack::ShowExceptionsRack::Reloader

Rack::AuthRack::Session便BasicOpenIDCookieMemchache

Rack


RackRackRack使

RackRubyWebRack沿

RackWebRackPassengerRackCGIPHPRackWeb



RackWebWeb便使使Rack


3RackRackRack
 

おすすめ記事

記事・ニュース一覧