basyura's blog

あしたになったらほんきだす。

さくらで sinatra

ようやくさくらサーバで sinatra が動いた。情報は探せばすぐ出てくると思うけど自分のまとめ。

  1. sinatra
  2. rack 0.9.1
  3. /home/basyura/lib/ruby/gem/gems/rack-0.9.1/lib/rack/request.rb を修正
begin
  @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
rescue Errno::ESPIPE
end

.htaccess

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 で失敗しているか、それ以外か。