kaeruspoon

涼宮ハルヒの消失を見てきました

172
今日は免許の更新で鮫洲の試験場へ朝から行ってきました。すごく空いていて、あっという間に手続きは完了。今回、はじめてのゴールド免許なので講習も30分で終了しました。楽ちん。免許制度がちょっと変わったせいで、ぼくの持っていた普通免許は中型免許(8トン限定)に変わりました。おもしろい。バイクの免許は昔、中型限定から普通二輪に変わったので、ちょうど逆な感じですね。

朝、家を出る前にがっちりマンデーを見ました。食べログというサイトが紹介されていました。

鮫洲から京急で川崎へ。川崎チネチッタで涼宮ハルヒの消失(映画です)を見るためです。改札でユルさんと待ち合わせて映画館へ。映画はとてもおもしろかったです。帰ってから小説を読み返したのですが、かなり忠実に作られていました。

Rails3.0でmiddleware stackに独自クラスを積む方法

Rails3.0では、独自のクラスをRackに積みたいときはconfig/application.rbで以下のように書けばいいようです。

module AppName
  class Application < Rails::Application
    .....(略)
    config.middleware.use "::NewRackClass"
  end
end

これでStackの中にNewRackClassが積まれます。

[tsukasa@ubuntu] $ rake middleware                                                                                                                                                  [~/devel/lesson]
(in /home/tsukasa/devel/app_name)
use ActionDispatch::Static
use Rack::Lock
use Rack::Runtime
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::Callbacks
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Rack::MethodOverride
use ActionDispatch::Head
use NewRackClass
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
run AppName::Application.routes

途中に挿入したいときはinsertメソッドなどを使用すればOKです。

簡単なRackアプリケーションの作り方

ちゃんとRackを勉強してなかったので、ちょっと遊んでみました。
基本的にはrackupファイルを作ってリクエストに対するレスポンスを返すクラスのインスタンスをrunメソッドで指定してあげればOKです。rackupファイルは拡張子.ruを使います。

config.ru

require 'rubygems'
require 'rack'

run Application.new


application.rb

class Application
  def call(env)
    request = Rack::Request.new(env)
    body = "ok"
    response = Rack::Response.new do |r|
      r.status = 200
      r["Content-Type"] = "text/plain;charset=utf8"
      r.write body
    end
    response.finish
  end
end


あとはrackupコマンドでこのrackupファイルを指定してあげると、webrickが起動します。ポート9292でアクセスできます。

[tsukasa@ubuntu] $ rackup config.ru
192.168.0.1 - - [18/Feb/2010 23:27:15] "GET /test/ HTTP/1.1" 200 26 0.0000


Rackに新しい処理を行うクラスを追加してみます。
test_add.rb

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

  def call(env)
    res = @app.call(env)
    res.last.write(" OK!")
    res
  end
end


そしてrackup.ruファイルに新しく作ったクラスを積みます。
config.ru

use TestAdd
run Application.new


簡単ですね。

のんびりした休日

173
そういえば、先週は伊東のほうへ開発合宿に出かけていました。開発合宿では有名な山喜旅館です。

というわけで今週はひさしぶり何の予定もない週末でした。おかげでのんびり過ごせました。予定といえば市長選挙と市議会議員選挙の投票に行ったくらい。ユルさんに髪を切ってもらったりウイイレで日本代表に招集されたりしていました。

来週はいよいよ楽しみにしていた旅行の日です。