«前の日記(2009-04-25(Sat)) 最新 次の日記(2009-04-29(Wed))» 編集

これ日記なん?


2009-04-26(Sun) [長年日記]

_ sinatra+cgiが動いた...

やっとこさsinatraのサンプルが手元で動いた。

kog@ubu1:/usr/local/lib/ruby/gems/1.8/gems/rack-0.9.1/lib/rack$ gem18 list | grep -e rack -e sinatra
rack (1.0.0, 0.9.1, 0.9.0, 0.4.0)
sinatra (0.9.1.1)
#!/usr/local/bin/ruby18

require 'rubygems'
require 'sinatra'

set :run, false
set :environment, :cgi

get '' do
  <<-END
  <pre>
#{$LOAD_PATH.join("\n").to_s}
  </pre>
  END
end

Rack::Handler::CGI.run Sinatra::Application
/usr/local/lib/ruby/gems/1.8/gems/rack-0.9.1/bin
/usr/local/lib/ruby/gems/1.8/gems/rack-0.9.1/lib
/usr/local/lib/ruby/gems/1.8/gems/sinatra-0.9.1.1/bin
/usr/local/lib/ruby/gems/1.8/gems/sinatra-0.9.1.1/lib
/usr/local/lib/ruby/site_ruby/1.8
/usr/local/lib/ruby/site_ruby/1.8/i686-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/1.8
/usr/local/lib/ruby/1.8/i686-linux
.
/usr/local/lib/ruby/gems/1.8/gems/rack-0.9.1/lib
  
kog@ubu1:/usr/local/lib/ruby/gems/1.8/gems/rack-0.9.1/lib/rack$ diff -u request.rb.orig request.rb
--- request.rb.orig     2009-04-26 10:38:49.000000000 +0900
+++ request.rb  2009-04-26 10:27:29.000000000 +0900
@@ -113,7 +113,10 @@
             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

rack 1.0.0は入れたのだけど、なんで使わんのだろうか?

参考:

_ さくらインターネットでsinatra

やっと動いた... はまりポイントとしては.htaccessのsetenvが利かないということで、スクリプトだけでなんとかしてみる。

#!/usr/local/bin/ruby -I/home/bangbangshoot/local/lib

ENV['GEM_HOME'] = '/home/bangbangshoot/local/rubygems'

require 'rubygems'
require 'sinatra'

set :run, false
set :environment, :cgi

get '' do
  <<-END
  <pre>
#{$LOAD_PATH.join("\n").to_s}
  </pre>
  END
end

Rack::Handler::CGI.run Sinatra::Application

RUBYLIB相当のを -I で指定し、GEM_HOMEを1行目に。

さくらインターネットでも setenv しろ、的なものは見かけたのだけど、私の使ってるホストでは利かない模様。まあ、サービスも複数あるし、サーバの世代もあるだろうし。

_ さくらインターネットでsinatra 2

いや、こっちのほうがいいかも

#!/usr/local/bin/ruby

$LOAD_PATH.unshift '/home/bangbangshoot/local/lib'
ENV['GEM_HOME'] = '/home/bangbangshoot/local/rubygems'