ようやくさくらサーバで sinatra が動いた。情報は探せばすぐ出てくると思うけど自分のまとめ。
begin @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind) rescue Errno::ESPIPE end
AddHandler cgi-script cgi DirectoryIndex dispatch.cgi <Files start.rb> deny from all </Files> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) dispatch.cgi/$1 [L]
■ dispatch.cgi
#!/usr/local/bin/ruby $LOAD_PATH.push '/home/basyura/lib' ENV['GEM_HOME'] = '/home/basyura/lib/ruby/gem' require 'rubygems' load 'start.rb' set :run, false Rack::Handler::CGI.run Sinatra::Application
■ start.rb
require 'rubygems' gem 'rack' , '0.9.1' require 'sinatra' require 'sequel' set :run, true set :sessions, true get '/?' do "hello" end
$LOAD_PATH と ENV['GEM_HOME'] の設定でつまづいたけど 500 エラーとしか分からなくて難航。そこで print デバッグが役に立った。dispatch.cgi に埋め込んでどこまで表示されるかでエラー箇所を判定する。
#!/usr/local/bin/ruby print "Content-type: text/html\n\n" print "<html><body>" print "load path" $LOAD_PATH.push '/home/basyura/lib' ENV['GEM_HOME'] = '/home/basyura/lib/ruby/gem' print "require rubygems" require 'rubygems' print "start.rb" load 'start.rb' print "set run" set :run, false print "</body></html>" exit Rack::Handler::CGI.run Sinatra::Application
rubygems の読み込みで失敗しているか、start.rb で失敗しているか、それ以外か。