読者です 読者をやめる 読者になる 読者になる

in the mythosil

Rhythm & Biology.

rack事始め

rackのインストール

% gem install rack

まずはHello World

# filename: hello.ru
require 'rubygems'
require 'rack'

class Hello
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello World"]]
  end
end

run Hello.new

実行

% rackup hello.ru
[2011-06-05 02:51:18] INFO  WEBrick 1.3.1
[2011-06-05 02:51:18] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.7.0]
[2011-06-05 02:51:18] INFO  WEBrick::HTTPServer#start: pid=88207 port=9292

ブラウザでlocalhost:9292にアクセスすると、Hello Worldが表示されます。サーバはCtrl-Cで終了できます。

これだけでは退屈なので、Rack::RequestとRack::Responseを使って色々な情報を出力してみます。

require 'rubygems'
require 'rack/request'
require 'rack/response'

class Hello
  def call(env)
    req = Rack::Request.new(env)
    params = req.params

    body = "Method: #{req.request_method}\n"
    body += "URL: #{req.url}\n"
    body += "Scheme: #{req.scheme}\n"                                           
    body += "Host: #{req.host}\n"
    body += "Port: #{req.port}\n"
    body += "Fullpath: #{req.fullpath}\n"
    body += "Pathinfo: #{req.path_info}\n"
    body += "Referrer: #{req.referrer}\n"
    body += "Scriptname: #{req.script_name}\n"

    params.each {|key, value|
      body += "#{key} => #{value}\n"
    }   

    res = Rack::Response.new
    res.status = 200 
    res["Content-Type"] = "text/plain"
    res.write body
    res.finish
  end 
end

run Hello.new