Rackについて

April 06 [Fri], 2012, 22:53
久しぶりに書きます、中村です。
すっかり春ですね。先日の嵐は凄かったですね。

さて、先日Rails3.2でWEBアプリを作成してみたりしたのですが、その際そもそもrailsの前にrackについてもっといじっておきたいと思い幾つかいじってみました。

既に参考となる記事を書いている方も多数いますので、それらを参考にしつつドキュメントを見たりして試してみました。
Rackは、WEBrickやthin、Mongrelなどのミドルウエア間差分を吸収し、Rubyアプリケーションを実行可能にします。密かに大事な仕事をする縁の下の力持ち的な存在です。

ではコードを入力して試してみましょう。
Rackアプリを動かす時には、config.ruというファイルを作ります。
例えば以下のように記述します。

#coding: utf-8
$:.unshift(File.dirname(__FILE__+"test"))

require "test/test"

target="http://jp.rubyist.net/magazine/?0035-ForeWord"
use Rack::Lint
use Rack::Test
run lambda {|env|
[200, {"Content-Type"=>"text/html"},[open(target).read.toutf8]]
}


これはRuby Magazineに載っていたサンプルを元に書いています。
最後の「run lambda」 以降でステータス200とHeaderの値、responseの内容を返します。
次に処理を行うクラスを定義します。ここのクラスでは、必ず「call」メソッドを定義します。


class Rack::Test
def initialize(app)
@app=app
end

def call(env)

end
end



callメソッドの中身で色々なことができます。ドキュメントを参考に幾つかみてみましょう。

参考



class Rack::Test
def initialize(app)
@app=app
end
def call(env)
Rack::Response.new.finish do |res|
res.write "Hello, Rackup"
end
end
end



#coding: utf-8
$:.unshift(File.dirname(__FILE__+"test"))

require "test/test"

use Rack::ShowExceptions
use Rack::CommonLogger
use Rack::Lint
use Rack::Test
run lambda {|env|
[200, {"Content-Type"=>"text/html"},"HELLO!!"
}


上記のuse Rack::Test で上のRackアプリケーションを読み込みます。
config.ruでRackのライブラリを読み込んで自分で作ったRackアプリケーションを起動しています。
Rack::Testの方ではRack::Respnsを使ってブラウザ上に文字列を書き込んでいます。

これで「rackup」を実行するとアプリケーションが「9292」ポートで起動します。

試しにブラウザで見てみるとちゃんんと文字列が表示されると思います。
色々と出来そうですね。

プロフィール
  • プロフィール画像
  • アイコン画像 ニックネーム:Rails3Sample
  • アイコン画像 性別:男性
  • アイコン画像 職業:その他
読者になる
本業では前はブログシステムの開発をやっていましたが、今はID/ポイント管理システムをやっています。
Java、Rubyをメインでやっています。Railsだけでなく、最近はJavaScriptやNoSQL、Androidアプリも興味ありやっています。多くの人から認められるエンジニアを目指して、日々勉強です。
2012年04月
« 前の月  |  次の月 »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
最新コメント