2008-12-06 [ĹǯÆüµ]
_ CGI ¤ò rackup ¤·¤Æ¤ß¤¿
Ruby ¤Ï¼«Ê¬¤ÎÂç¹¥¤¤Ê¸À¸ì¤À¤¬¡¢¼Â¤ÏŤ¯±¿ÍѤ¹¤ë Web ¥¢¥×¥ê¤ò Ruby ¤Ç½ñ¤¤¤¿¤³¤È¤Ï¤Ê¤¤¡£cgi.rb ¤ÎɾȽ¤Ï¤º¤¤¤Ö¤óÁ°¤«¤é˧¤·¤¯¤Ê¤¤¤·¡¢·èÄêÂǤȤʤë¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤ÎÉԺߤ¬Ä¹¤¯Â³¤¤¤¿¤³¤È¡¢¤¹¤Ç¤Ë PHP ¤ò»È¤Ã¤Æ¤¤¤¿¤³¤È¤¬Â礤ÊÍýͳ¤À¤Ã¤¿¡£
Rails ¤¬Åо줷¤¿¡£ÊÙ¶¯¤·¤¿¡£¡Ö¤¦¡¼¤ó¡¢¤Ê¤ó¤« DBMS ¤È¤«Íפé¤Ê¤¤¤ó¤À¤±¤É¡¢¤É¤¦¤·¤¿¤é¤¤¤¤¤Î¤è¡©¡×¤È»×¤Ã¤Æ¤¤¤ë¤¦¤Á¤ËÀ¤´Ö¤Ç¤Ï¤¹¤Ã¤«¤êÄêÃå¡¢Âå¤ï¤ê¤Ë¼«Ê¬¤ÎÃæ¤Ç¤Ï¶½Ì£¤ÏÇö¤ì¤Æ¤¤¤Ã¤¿¡£¤½¤¦¤³¤¦¤·¤Æ¤¤¤ë¤¦¤Á¤Ë Rails ¤ÎÌäÂêÅÀ¤â¤Á¤ç¤³¤Á¤ç¤³»ØÅ¦¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¡¢prototype.js ¤È¤È¤â¤ËÀè¶î¼Ô¤æ¤¨¤Î¶ìÆñ¤òÌ£¤ï¤Ã¤Æ¤¤¤ë¤Ê¤¡¤È´¶¤¸¤Æ¤¤¤ëº£Æü¤³¤Îº¢¡£
Merb ¤À¤Ê¤ó¤À¤È¸À¤ï¤ì¤Æ¤¤¤¿Ãæ¡¢Rack ¤¬Åо줷¤¿¡£¤³¤ì¤À¡ª¤È»×¤Ã¤¿¡£¤³¤¦¤¤¤¦¥·¥ó¥×¥ë¤Ê¤ä¤Ä¤¬Íߤ·¤«¤Ã¤¿¤ó¤À¤è¡ª¡¡¤·¤«¤·¤½¤ì¤«¤éÆÃ¤Ë²¿¤ÎÍýͳ¤â¤Ê¤¤¤Þ¤Þ°ìǯȾ¤Î·îÆü¤¬Î®¤ì¤¿¡£¤Ê¤ó¤«¤³¤ó¤Ê¤ó¤Ð¤Ã¤«¤À¤Ê¡£RSS ¤ÎÅоì¤Ë¤è¤ê¾ðÊó¤Î¼ý½¸¤Ï®¤¯¤Ê¤Ã¤¿¤±¤É¡¢Ãμ±¤Ë¤¹¤ë¤¿¤á¤Î»þ´Ö¡¢¼ê¤òư¤«¤·¤Æ¡Ö¤Ä¤«¤à¡×¤Þ¤Ç¤Î»þ´Ö¤Ï¡¢¼«Ê¬¤È¤¤¤¦¿Í´Ö¤ÎÀǽ¤¬ÊѤï¤é¤Ê¤¤*1¤Î¤Ç¤Á¤Ã¤È¤âû¤¯¤Ê¤é¤Ê¤¤¡£
¤½¤ó¤Ê¥ª¥ì¸ì¤ê¤Ï¤É¤¦¤Ç¤â¤è¤¯¡¢º£²ó¤Ï¤è¤¦¤ä¤¯¼«Ê¬¤Ç Rack ¤ò»È¤Ã¤Æ¤ß¤Þ¤·¤¿¤è¤È¤¤¤¦¤ªÏᣤ·¤«¤â¡¢¤¢¤ó¤Þ¤ê¸«¤Ê¤¤¡¢WEBrick ¤È CGI ¤ÎÆóËÜΩ¤Æ¡£»î¤·¤¿¤Î¤Ï gem ¤ÇÆþ¤ì¤¿ rack 0.4.0
Rack ¤Î»È¤¤Êý¤ÏÆóÃʳ¬¤¢¤ë
Ķ´Êñ¤Ê¥Á¥å¡¼¥È¥ê¥¢¥ë¤òÆÉ¤ó¤Ç¤â¥ê¥Õ¥¡¥ì¥ó¥¹¤ò¸«¤Æ¤â¤³¤Î°ã¤¤¤òÌÀ³Î¤Ë°Õ¼±¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¯¤Æ¶ìÏ«¤·¤¿¡£Rack ¤Îµ¡Ç½¤Ë¤Ï°Ê²¼¤ÎÆóÃʳ¬¤¬¤¢¤ë¡£
- Handler ¤Ë¤è¤Ã¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥µ¡¼¥Ð¤Î°ã¤¤¤òÃê¾Ý²½¤¹¤ë
- rackup ¤Ë¤è¤Ã¤ÆÊØÍø¤Ê¥ß¥É¥ë¥¦¥§¥¢¤ò»È¤¦
¤³¤Î°ã¤¤¤Ï
- ruby ¤«¤éľÀÜ Rack::Handler::FOO.run( App.new )
- rackup ¤«¤é run( App.new )
¤Î°ã¤¤¤«¤é¤¯¤ë¡£Íפ¹¤ë¤Ë
¥ß¥É¥ë¥¦¥§¥¢¤ò use ¤·¤¿¤±¤ì¤Ð rackup ¤·¤í
¤Ã¤Æ¤³¤È¡£
µÕ¤Ë¸À¤¦¤È rackup ¤·¤Ê¤¯¤Æ¤â Request, Response ¤ÎÃê¾Ý²½¤Ï¹Ô¤¨¤ë¤Î¤Ç´ðËÜŪ¤Ê¤³¤È¤Ï¤Ç¤¤ë¡£
¤Ç¤Ï¤½¤ì¤¾¤ì¤ÎÊýË¡¤ò¤â¤¦¾¯¤·¾Ü¤·¤¯¸«¤Æ¤ß¤ë¡£
¢¨ ¥Ö¥³¥á¤¤¤¿¤À¤¤Þ¤·¤¿¡£¥ß¥É¥ë¥¦¥§¥¢¤ÎÃæ¤Ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òÆÍ¤Ã¹þ¤ó¤Ç¡¢¥ß¥É¥ë¥¦¥§¥¢¤ò Handler ¤ËÅϤ¹¤È¤¤¤¦ÊýË¡¤â¤¢¤ë¤è¤¦¤Ç¤¹¡£¤Ê¤ó¤«¤Á¤ç¤Ã¤ÈÉԻ׵Ĥʴ¶¤¸¤â¤·¤Þ¤¹¤¬¡¢¤½¤â¤½¤âÆâÉô¤Ç¤Ï¥ß¥É¥ë¥¦¥§¥¢¤Ç¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºÆµ¢Åª¤Ë wrap ¤¹¤ë¹½Â¤¤Î¤è¤¦¤Ç¤¹¡£
lib/rack/lobster.rb at master from chneukirchen's rack ¡½ GitHub
ruby ¤«¤éľÀÜ Handler ¤ò¸Æ¤ÖÊýË¡
WEBrick ¤ÎÎã
komagata ¤µ¤ó¤Îµ»ö¤«¤éÇÒ¼Ú¡£
¥¦¥Î¥¦¥é¥Ü Unoh Labs: Rack¤ÇWeb¥¢¥×¥ê¤ÎWeb¥µ¡¼¥Ð¡¼°Í¸¤ò̵¤¯¤¹
#!/usr/bin/env ruby
require 'rubygems'
require 'rack'
class HelloRack
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello, Rack"]]
end
end
Rack::Handler::WEBrick.run HelloRack.new, :Port => 3000
¤³¤Î hello-rack.rb ¤ò
ruby hello-rack.rb
¤Çµ¯¤³¤·¡¢¤³¤ì¤Ë¥Ö¥é¥¦¥¶¤«¤é¥¢¥¯¥»¥¹¤¹¤ë¤È
Hello, Rack
¤Èɽ¼¨¤µ¤ì¤ë¡£¤¦¤à¡£
CGI ¤ÎÎã
Ʊ¤¸¤³¤È¤Ï CGI ¤Ç¤âÅöÁ³¤Ç¤¤ë¡£
#!/usr/bin/env ruby
require 'rubygems'
require 'rack'
class HelloRack
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello, Rack"]]
end
end
Rack::Handler::CGI.run HelloRack.new
¤³¤ó¤Ê´¶¤¸¤Ç Handler ¤ò CGI ¤Ë¤·¤Æ¤ä¤ì¤Ð ok. ¤³¤ì¤ò
- Web ¥µ¡¼¥ÐÇÛ²¼¤Î CGI ¤Î¼Â¹Ô²Äǽ¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤ËÃÖ¤¤¤Æ
- ¼Â¹Ô¸¢¸Â¤òÉÕ¤±¤Æ
¥Ö¥é¥¦¥¶¤«¤é¥¢¥¯¥»¥¹¤·¤Æ¤ä¤ë¤È¤µ¤Ã¤¤ÈƱ¤¸¤è¤¦¤Ë
Hello, Rack
¤Èɽ¼¨¤µ¤ì¤ë¡£¤á¤Ç¤¿¤·¤á¤Ç¤¿¤·¡£
¤³¤ì¤Ç cgi.rb ¤ò»È¤ï¤Ê¤¯¤Æ¤â Ruby ¤Ç CGI ¤ò½ñ¤±¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤è¡ª
¡ÊCGIAlt ¤¬¤¢¤ë¤È¤«¸À¤ï¤Ê¤¤¤Ç¤Í¡£¡Ë
µ¤¤ò¤Ä¤±¤Ê¤¤ã¤¤¤±¤Ê¤¤¤³¤È
°Ê²¼¤Ï¼«Ê¬¤Î¤¿¤á¤Î¥á¥â
- CGI ¤Î¾ì¹ç¤Ï Web ¥µ¡¼¥Ð¤¬¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¾¡¼ê¤Ëµ¯¤³¤·¤Æ¤¯¤ì¤ë¤±¤É¡¢¼Â¹Ô¸¢¸Â¤ÎÉÕÍ¿¤¬É¬Í×
- WEBrick¡Ê¤Ê¤É¡Ë¤Î¾ì¹ç¤Ï¼«Ê¬¤Ç¥¢¥×¥ê¤òµ¯¤³¤·¤Æ¤ä¤é¤Ê¤¤¤È¤¤¤±¤Ê¤¤
¼«Ê¬¤Î¾ì¹ç¤ÏÀ¸ CGI ¤ò¿¨¤ëµ¡²ñ¤¬¸º¤Ã¤Æ¤¤¤ë¤Î¤Ç¼Â¹Ô¸¢¸Â¤ÎÉÕÍ¿¤ò¤·¤ç¤Ã¤Á¤å¤¦Ëº¤ì¤ë¡£
¤Ç¤â Rack ¤ÎËÜÅö¤Î°ÒÎϤòÌ£¤ï¤¦¤Ê¤é rackup
rackup ¤Ï
rackup -s webrick [config file]
¤Ê¤É¤È¤·¤Æ server(handler) ¤ò»ØÄꤷ¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥µ¡¼¥Ð¤òµ¯Æ°¤¹¤ë¡£rackup ¤¬¹Ô¤ï¤ì¤ë¤È¡¢Ãæ¤Ç
Rack::Builder
¤¬¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥µ¡¼¥Ð¤Î´Ä¶¤òºî¤Ã¤Æ¤¯¤ì¡¢¼«Ê¬¤Î½ñ¤¤¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¤³¤ÎÃæ¤Ç¼Â¹Ô¤µ¤ì¤ë¡£
¤³¤³¤Ç½é¤á¤Æ use ¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£
¤â¤¦¤Á¤ç¤Ã¤ÈºÙ¤«¤¯¸«¤Æ¤ß¤è¤¦¡£
use ¤Ï Rack::Builder ¤Î instance_method
Rack ¤Ç¥ß¥É¥ë¥¦¥§¥¢¤òÄɲ乤ë use ¤Ï Rack::Builder ¤Î instance_method ¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
irb(main):001:0> require 'rack' => true irb(main):002:0> Rack::Builder.methods.grep( /use/ ) => [] irb(main):003:0> Rack::Builder.instance_methods.grep( /use/ ) => ["use"]
¤Ä¤Þ¤ê
require 'rack'
¤·¤¿¤À¤±¤Ç¤Ï use ¤Ï»È¤¨¤Ê¤¤¡£
rackup ¤Îή¤ì
rackup ¤òÆÉ¤ó¤Ç¤ß¤ë¤È¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï rackup ¤ÎÃæ¤Ç°Ê²¼¤Î¤è¤¦¤Ë¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¡£¡Ê¾ÜºÙ¤ÏüÀޤäƤ¢¤ë¡Ë
Rack::Builder.new {
run inner_app
}
¤Ä¤Þ¤ê¤½¤¦¤¤¤¦¤³¤È¡£Rack ¤ÎÊØÍøµ¡Ç½¤ò»È¤¤¤¿¤±¤ì¤Ð rackup ¤¹¤Ù¤·¡£
¤Ç¤Ï¼ÂºÝ¤Ë rackup ¤·¤Æ¤ß¤ë¡£
WEBrick ¤ÎÎã
ľÀܵ¯Æ°¤Ç use ¤Î»È¤¨¤Ê¤¤ÍÍ»Ò
¤µ¤¤Û¤É¤Î hello-rack.rb ¤Ë use ¤ò²Ã¤¨¤ë¡£
#!/usr/bin/env ruby
require 'rubygems'
require 'rack'
use Rack::ShowExceptions
class HelloRack
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello, Rack"]]
end
end
Rack::Handler.WEBrick.run HelloRack.new, :Port => 3000
¤¹¤ë¤È¡¢ÅöÁ³¤Ê¤¬¤é
$ ruby hello-rack.rb hello-rack.rb:6: undefined method `use' for main:Object (NoMethodError)
Åܤé¤ì¤ë¡£use ¤Ê¤ó¤Æ»È¤¨¤Ê¤¤¡£
rackup ¤·¤Æ¤ß¤ë
#! /usr/bin/env ruby
require 'rubygems'
require 'rack'
use Rack::ShowExceptions
class HelloRack
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello, Rack"]]
cho_www
end
end
run HelloRack.new
¤³¤³¤ÇÃíÌܤ·¤Æ¤Û¤·¤¤¤Î¤Ï¡¢
- cho_www ¤È¤¤¤¦ syntax error ¤ò¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÃæ¤Ë»Å¹þ¤ó¤Ç¤¢¤ë¤È¤³¤í
- run ¤Î¸Æ¤ÓÊý¤òÊѤ¨¤¿¤È¤³¤í
¤É¤¦¤â
rackup ¤¹¤ë¤È¤¤Ï Handler ¤Ï³°¤«¤é¡Êrackup ¤Î -s ¥ª¥×¥·¥ç¥ó¤Ç¡Ë»ØÄꤷ¤Æ¤¢¤²¤¿Êý¤¬¤Ê¤ó¤«¤¦¤Þ¤¯¤¤¤¯´¶¤¸¡£
¤³¤ì¤ò hello-rack.ru ¤Î̾Á°¤ÇÊݸ¤·¡¢
rackup -s webrick -p 3000 hello-rack.ru

¤Ç¼Â¹Ô¡£
¤´Í÷¤Î¤è¤¦¤Ë¥Ö¥é¥¦¥¶¾å¤Ë Exception ¤òɽ¼¨¤Ç¤¤ë¡£²èÁü¤Ç¤ÏüÀޤäƤ¢¤ë¤¬ TraceBack ¤âɽ¼¨¤Ç¤¤ë¡£ÅöÁ³¤Î¤³¤È¤Ê¤¬¤é cho_www ¤òºï½ü¤¹¤ì¤ÐÉáÄÌ¤ËÆ°¤¯¡£
CGI ¤ÎÎã
ľÀܵ¯¤³¤·¤Æ use ¤·¤Æ¥À¥á¤Ê¤Î¤Ï¤µ¤Ã¤ WEBrick ¤Ç¸«¤¿¤Î¤Ç¾Êά¡£
rackup ¤¹¤ë
ru ¥Õ¥¡¥¤¥ë¤Ï¤µ¤Ã¤ÍѰդ·¤¿ hello-rack.ru ¤ò¤½¤Î¤Þ¤ÞÍøÍÑ¡£CGI ¤ÎÊý¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤¹¤ë¡£
#! /bin/sh /opt/local/bin/rackup hello-rack.ru

¥Ñ¥¹¤¬ /opt/local/bin ¤Ê¤Î¤Ï MacPorts ¤ÇÆþ¤ì¤¿ Ruby ¤Ç gem ¤ò»È¤Ã¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤ë¤«¤é¡£rackup ¤Î¥Ñ¥¹¤ÏŬµ¹Ä´À°¤¹¤ë¤³¤È¡£
¤³¤ì¤ò hello-rack.cgi ¤Î̾Á°¤ÇÊݸ¡¢¤´¤Ë¤ç¤´¤Ë¤ç¤·¤Æ¥Ö¥é¥¦¥¶¤«¤é¥¢¥¯¥»¥¹¤·¤Æ¤ß¤ë¡£²èÁü¤ÎÃæ¤Î URL ¤Î°ã¤¤¤ËÃíÌÜ¡£³Î¤«¤Ë CGI ¤Çư¤¤¤Æ¤¤¤ë¡£
¤¿¤À¤·¡¢ÅöÁ³¤Î¤³¤È¤Ê¤¬¤é CGI ¤Ç rackup ¤¹¤ë¤Î¤ÏÉé²ÙŪ¤Ë¤ÏÉÔÍø¡£
½¾Íè¤Îή¤ì
- shebang ¤«¤é Ruby ¤òµ¯Æ°
- ¼«Ê¬¼«¿È¤òÆÉ¤ß¹þ¤Þ¤»¤ë
rackup »þ¤Îή¤ì
- shebang ¤Ç sh ¤ä¾¤Î¥¤¥ó¥¿¥×¥ê¥¿¤«¤é
- rackup ¥³¥Þ¥ó¥É¤ò¸Æ¤Ó½Ð¤·
- ¤½¤³¤«¤é ruby ¤¬¸Æ¤Ð¤ì
- ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬¥í¡¼¥É¤µ¤ì¤ë
¤È¤¤¤¦Ä¹¤¤Æ»¤Î¤ê¤òÍפ¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¡£¤Ç¤â¥á¥ê¥Ã¥È¤Ç¤«¤¤¤·¡£
¤ï¤¶¤ï¤¶ÊÌ¥×¥í¥»¥¹¤Î rackup ¤«¤éµ¯Æ°¤·¤Ê¤¯¤Æ¤â¤¤¤ó¤¸¤ã¤Í¡©¤È»×¤¤¤¿¤¤¤Î¤Ïʬ¤«¤ë¡£¼«Ê¬¤â»×¤Ã¤¿¡£¤Ç¤â·ë¶É rackup ¤ÈƱ¤¸¤È¤Þ¤Ç¤Ï¤¤¤«¤Ê¤¤¤Þ¤Ç¤â»÷¤¿¤è¤¦¤Êή¤ì¤Ç Rack::Builder ¤ò¸Æ¤ó¤Ç¤¢¤²¤Ê¤¤ã¤¤¤±¤Ê¤¤¤Î¤Ç¡¢Rack ¤ËÍê¤ë¤¦¤Þ¤ß¤¬Çö¤ì¤Á¤ã¤¦¤è¤Í¡©¤È»×¤¦¤Î¤Ç¤½¤¦¤¤¤¦¤³¤È¤Ï¤·¤Ê¤¤¤³¤È¤Ë¤·¤¿¡£
¤Þ¤È¤á
²¿¤Ï¤È¤â¤¢¤ì¡¢Rack ¤Î´ðËÜŪ¤Ê»È¤¤Êý¤Ïʬ¤«¤Ã¤¿¡£map ¤È¤«¤Ïʬ¤«¤Ã¤Æ¤Ê¤¤¤±¤É¡¢¤³¤ì¤Ç
- WEBrick ¤Ç³«È¯
- ¤È¤ê¤¢¤¨¤º CGI ¤Ç deploy
- Éé²ÙŪ¤Ë¤Þ¤º¤¤¤Î¤Ç FastCGI ¤Ë¤·¤Þ¤·¤ç¤¦¤«
¤È¤¤¤Ã¤¿½ÀÆð¤Ê±¿ÍѤ¬²Äǽ¤Ë¤Ê¤Ã¤¿¡£
¤è¤·¤è¤·¡£
»²¹Í
- KoshigoeBLOG: Rack²òÀâ¤ò»î¤ß¤Æ¼ºÇÔ¤·¤Ä¤Ä¤â»¯¤¹¡¢¤Î´¬
- Greenbear Laboratory - RackÆüËܸì¥ê¥Õ¥¡¥ì¥ó¥¹
- Rack¤òÆÉ¤à¤Î¤Þ¤È¤á - I am Cruby!
- Ëþ¤»¤ëÆÚ¡£Ì²¤¿¤²¤Ê¥Ý¥Á¡£:CGI ¤«¤é Mongrel ¤Þ¤Ç¡¢Rack ¤Ç Web ¥¢¥×¥ê¤ò Web ¥µ¡¼¥Ð¤«¤éÃê¾Ý²½¤¹¤ë
- ¥¦¥Î¥¦¥é¥Ü Unoh Labs: Rack¤ÇWeb¥¢¥×¥ê¤ÎWeb¥µ¡¼¥Ð¡¼°Í¸¤ò̵¤¯¤¹
*1 ¤È¤¤¤¦¤«²ÃÎð¤È¤È¤â¤ËÍî¤Á¤ë°ìÊý¤À¤¼¡ª ¥ª¥ì¤Ï10Âå¤Î¼ã¼Ô¤¸¤ã¤Í¤§¡ª