Ramaze ã CGI ã¨ãã¦åãã
ããã¸ã§ã¯ã(scratch)使
ramaze --create scratch --adapter cgi
--adapter cgiã¨ãã¦ããçæãããã®ã¯Webrickç¨ã®ã½ã¼ã¹ã§ããã
public/dispatch.cgi ã使
#!/usr/bin/env ruby
require 'rubygems'
require 'ramaze'
Ramaze::Log.loggers = [ Ramaze::Logger::Informer.new( __DIR__("../ramaze.log") ) ]
Ramaze::Global.adapter = :cgi
$ramaze_0 = __DIR__("../start.rb")
alias $0 $ramaze_0
Dir.chdir File.dirname($0)
load File.basename($0)
ãªãã§ã $0 = __DIR__("../start.rb") ã§ã¯ãªãã®ãã¨ããã¨ããã£ã¬ã¯ããªã®ãã«ãã¹ãé·ãããï¼ä¾ãã° /path/to/very/long/path ï¼ã¨ $0 ã«æ ¼ç´ããããéä¸ã§åãã¦ï¼ /path/to/ve ï¼ãã¾ãããã ã
ãªããstart.rb ã¨åããã©ã«ãã« chdir ãã¦ãã start.rb ã«å¶å¾¡ãç§»ããªãã¨ããªãã "no such action: /page" ã¨ããã¨ã©ã¼ã«ãªã£ã¦ãã¾ãã
ï¼è¿½è¨ï¼ä»ã¯ãã£ã¨ã·ã³ãã«ã«æ¸ãã¦ããããã¦ããã
#!/usr/bin/env ruby
# Go to application directory.
Dir.chdir(File.dirname($0))
Dir.chdir("..")
require 'rubygems'
require 'ramaze'
Ramaze::Log.loggers = [ Ramaze::Logger::Informer.new("ramaze.log") ]
Ramaze::Global.adapter = :cgi
$0 = "start.rb"
load $0
start.rb ãç·¨é
Ramaze.start :adapter => :webrick, :port => 7000
ã¨ãªã£ã¦ããã®ãåã«ã
Ramaze.start
ã¨ãã¦ããã
public/.htaccess使
RewriteEngine on RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
ã¢ã¯ã»ã¹ãã
Illegal seek ã¨ã©ã¼ï¼
ãªããã¨ã©ã¼ã«ãªã£ãï¼
Errno::ESPIPE - Illegal seek åå ç®æã¯ï¼ /opt/local/lib/ruby/gems/1.8/gems/rack-0.9.1/lib/rack/request.rb: in rewind @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
ããã¯ã
$ ruby -e "IO.pipe[0].rewind"
-e:1:in `rewind': Illegal seek (Errno::ESPIPE)
from -e:1ã¨ããã®ã¨åããã¨ã CGI Adapter ã¯ããã¾ããã¹ãããã¦ããªãã®ããªâ¦ãã¨ããããã
Index: request.rb
===================================================================
--- request.rb (revision 6)
+++ request.rb (working copy)
@@ -113,7 +113,9 @@
Utils::Multipart.parse_multipart(env)
@env["rack.request.form_vars"] = @env["rack.input"].read
@env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"])
- @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
+ begin
+ @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
+ rescue Errno::ESPIPE; end
end
@env["rack.request.form_hash"]
elseã¨ãã風ã«ç´ãã¦ã
å度ã¢ã¯ã»ã¹ãã
http://localhost/path/to/scratch/public/
ãã§ããæåãã
Welcome to Ramaze! Ramaze is working correctly with this application, now you can start working.
Intel Core2Duo 2.1GHz ã®ãã¤ãã·ã³ã§ãå®è¡æéã¯ç´ 0.3 ç§ã ã£ããå®éã¢ããªãçµãã°ããã«æéããããã ãããããããªãååCGIã¨ãã¦åããããã§ããã
$ command time ./scratch/public/dispatch.cgi < /dev/null > /dev/null
0.29 real 0.23 user 0.05 sys