Rack

Rubyでウェブアプリ〜Rack

投稿日:

By: Juan Pablo OlmoCC BY 2.0[/caption]

Rackとは

「RackはRubyのためのWebサーバーインターフェイス」(5分でわかるRack

Rackは、mongrel,WEBrick,thin,unicornなどのサーバとRails,sinatraなどのフレームワークの橋渡しをする役割

公式

rack.github.io/
github.com/rack/rack

ドキュメント

rack.rubyforge.org/doc/

成り立ちとか

第23回 Rackとは何か(1)Rackの生まれた背景

全般的なより詳細な記事

Rack解説 – Rackの構造とRack DSL

インストール

環境はRuby2.1.0

rackのバージョンは1.5.2

ハローワールド

適当にディレクトリを作成して

config.ruを作成する

hello.rbを作成する

サーバを立ち上げる

ブラウザにHello Worldと表示されていればOK

Rack::Reloader

config.ruのrunの前の行に次のとおりに書き足す

すると、サーバを再起動しなくても対象のファイルの変更を即時に反映する

Rackの使い方

Rackアプリケーションとして最低限必要なのことは次の通りです。

  • callというメソッドを持っていること
  • callメソッドの引数としてWebサーバからのリクエストを受けること
  • callメソッドは,次の要素を含むレスポンスを返すること
    • ステータスコード
    • レスポンスヘッダ(Hash)
    • レスポンスボディ(Array)

(第23回 Rackとは何か(1)Rackの生まれた背景)

その仕組は、次のページが詳しい

エラーメッセージから学ぶRack – 最初の一歩

config.ruの書き方〜Rack::Builder

map

アドレスによってRackアプリケーションを使い分ける方法

 

use

Rackアプリケーションのcallメソッドとinitializeメソッドの仕組みは次のページが詳しい

エラーメッセージから学ぶRack – Middlewareの魔法

要するに、useしたアプリケーションのinitializeにrunしたアプリケーションが渡されるので、useしたアプリケーションのcallメソッドのなかでcallしてやれば、runするアプリケーションの挙動を変えるアプリケーションを作ることができるっぽい

複数のアプリケーションを積むこともできる

[Ruby]Rack – ミドルウェア

Rack::ResponseとRack::Request

Rackアプリケーションを書くときに、受け取ったRequestやResponseをRackの規格に合わせるために便利なラッパーがある

なので、いい感じにERBを使うこともできる

views/index.html.erbを作っておけばOK

そのほか、cookieの設定とかもできる

Rack::Requestはenvを与えておく

この辺りはRailsCastsで

#317 Rack App from Scratch pro

RailsとRackミドルウェアの使い方の例とか

RailsもRackアプリケーションなのでRailsとあわせて使える

Railsの前にbodyをレンダリングする時間を測定するRackアプリの例

#151 Rack Middleware

jQueryUIのAutoComplete用の用語をrakeでredisに渡して高速に取得するミドルウェアの利用例

#399 Autocomplete Search Terms pro

複数のモデルをまとめてアップデートする場合とかにjsonのリクエストがバラバラなのを1つのリクエストで済ますバッチをRackアプリでつくる

#414 Batch API Requests pro

rack-contrib

様々なRackミドルウェア

  • Rack::JSONP – Adds JSON-P support by stripping out the callback param and padding the response with the appropriate callback format.
  • Rack::LighttpdScriptNameFix – Fixes how lighttpd sets the SCRIPT_NAME and PATH_INFO variables in certain configurations.
  • Rack::Locale – Detects the client locale using the Accept-Language request header and sets a rack.locale variable in the environment.
  • Rack::MailExceptions – Rescues exceptions raised from the app and sends a useful email with the exception, stacktrace, and contents of the environment.
  • Rack::NestedParams – parses form params with subscripts (e.g., * “post[title]=Hello”) into a nested/recursive Hash structure (based on Rails’ implementation).
  • Rack::PostBodyContentTypeParser – Adds support for JSON request bodies. The Rack parameter hash is populated by deserializing the JSON data provided in the request body when the Content-Type is application/json.
  • Rack::ProcTitle – Displays request information in process title ($0) for monitoring/inspection with ps(1).
  • Rack::Profiler – Uses ruby-prof to measure request time.
  • Rack::Sendfile – Enables X-Sendfile support for bodies that can be served from file.
  • Rack::Signals – Installs signal handlers that are safely processed after a request
  • Rack::StaticCache – Modifies the response headers to facilitiate client and proxy caching for static files that minimizes http requests and improves overall load times for second time visitors.
  • Rack::TimeZone – Detects the client’s timezone using JavaScript and sets a variable in Rack’s environment with the offset from UTC.
  • Rack::Evil – Lets the rack application return a response to the client from any place.
  • Rack::Callbacks – Implements DSL for pure before/after filter like Middlewares.
  • Rack::Config – Shared configuration for cooperative middleware.
  • Rack::NotFound – A default 404 application.
  • Rack::CSSHTTPRequest – Adds CSSHTTPRequest support by encoding responses as CSS for cross-site AJAX-style data loading
  • Rack::Deflect – Helps protect against DoS attacks.
  • Rack::ResponseCache – Caches responses to requests without query strings to Disk or a user provider Ruby object. Similar to Rails’ page caching.
  • Rack::RelativeRedirect – Transforms relative paths in redirects to absolute URLs.
  • Rack::Backstage – Returns content of specified file if it exists, which makes it convenient for putting up maintenance pages.
  • Rack::AcceptFormat – Adds a format extension at the end of the URI when there is none, corresponding to the mime-type given in the Accept HTTP header.
  • Rack::HostMeta – Configures /host-meta using a block
  • Rack::Cookies – Adds simple cookie jar hash to env
  • Rack::Access – Limits access based on IP address
  • Rack::ResponseHeaders – Manipulates response headers object at runtime
  • Rack::SimpleEndpoint – Creates simple endpoints with routing rules, similar to Sinatra actions
  • Rack::TryStatic – Tries to match request to a static file
  • Rack::Printout – Prints the environment and the response per request

RailsでRack Middlewareを使う

config/application.rbに書く

 

 

Rack Middlewareを使ったRailsプラグインgemの作り方は詳しくはこの本

-Rack
-

執筆者: