その2:http://blogs.wankuma.com/kazuki/archive/2008/12/13/163617.aspx
前回までで、コントローラの超基本的な部分をさらっとやってブラウザから動かしてみた。
一般的なリクエストを受け取って、何かやって、何かしら画面を表示する流れは完璧?のはず。
今回は、コントローラをコンソールから起動する方法をやってみようと思う。
プロジェクトは前回に引き続き、controller_eduを使っていく。
Ruby on Railsのアプリケーションで作ったクラスを、軽くコンソールから動かしてみようというときに使えるものとしてRails コンソールというものがある。
NetBeans 6.5では、プロジェクトで右クリックしてRails コンソールで起動できる。似た動きをするものとして、Ruby シェルというものがあるけど、別物なので間違えないように気をつけよう。
Railsコンソールを選択すると、出力ウィンドウにRails コンソールが出現する。
この>> の後にRubyのプログラムを書いてEnterを押すと、その瞬間に実行されて結果が返ってくる。
ぱっと試すにはちょうどいい。
さて、コントローラの起動は、Dispatcherクラスのdispatchメソッドで行う。
dispatchメソッドは、環境変数のREQUEST_URIとREQUEST_METHODの値を見て呼び出すコントローラを決める。
REQUEST_URIは/sample/fooといった感じの値で、REQUEST_METHODは、getやpostになる。SampleControllerのfooを実行する場合はREQUEST_URI = /sample/fooで、REQUEST_METHOD = getになる。
環境変数は、ENV['環境変数名'] = 値の形でセットできる。
ということでRailsコンソールに以下のように打ち込む。
>> ENV['REQUEST_URI'] = '/sample/foo'
=> "/sample/foo"
>> ENV['REQUEST_METHOD'] = 'get'
=> "get"
>> Dispatcher.dispatch
(=> で始まる行は、Railsコンソールが出力してるものです。実際に打ち込むのは>>で始まる行)
これを打ち込むと最後に以下のような出力が得られる。
sample/foo
Content-Type: text/html; charset=utf-8
Set-Cookie: _controller_edu_session=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%0ASGFzaHsABjoKQHVzZWR7AA%3D%3D--7824faf835e88677af7a3c87ee74b2899014c46d; path=/
Cache-Control: private, max-age=0, must-revalidate
Status: 200 OK
X-Runtime: 0.02360
ETag: "a59079edf6feb83129c2299a1c5e77b0"
Content-Length: 68
<h1>Sample#foo</h1>
<p>Find me in app/views/sample/foo.html.erb</p>
これが、SampleControllerのfooアクションの結果のレスポンスになる。
ちょっとしたもので、動きを確認するなら、この方法もありかな。
実際に自分で起動してみると何だかわかった気分になる不思議な感覚を得る効果もある。