rackは
Rack provides a minimal interface between webservers supporting Ruby and Ruby frameworks.
との解説にあるように、webサーバとRubyスクリプトを結びつける役割を担います。
Rackがサーバを抽象化してくれる事で、柔軟な運用が可能となるわけです。
今回は勉強がてら、rackを使ってブラウザにお天気情報を出すスクリプトを書いてみました。
まずはrackに読み込ませるスクリプトです。
Curbをつかってlivedoorのお天気情報を貰って来ます。
# -*- coding: utf-8 -*- require 'erb' require 'json' require 'curb' class SampleApp def call(env) case env['REQUEST_METHOD'] when 'GET' url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010' json_result = (JSON.parse!(Curl.get(url).body_str)) body = ["Weather :: " << Time.now.strftime("%Y-%m-%d_%H:%M:%S").to_s << " "<< json_result["forecasts"][0]["telop"].to_s] [200, {"Content-Type" => "text/plain"}, body] else [200, {"Content-Type" => "text/plain"}, ['No content here']] end end end
続いてrackの設定ファイルです。
rackupと同時にブラウザ起動させたくない場合はlaunchyまわりをコメントアウトします。*1
require './sandbox.rb' require 'launchy' run SampleApp.new() Launchy.open('http://localhost:9292/')
以上を同一フォルダにおき、
$ rackup sandbox.ru
とやれば、
Weather :: 2014-04-11_23:26:18晴れ
といった感じでシンプルなテキストが出て来ます。
ここからガリガリ作り込んでいったものがsinatraやrailsというわけですね。
参考もと
*1:まぁ、この程度ならパイプ処理でやった方がスマートな感じはしますが