さくらインターネットでsinatraを動かそうとしたらはまった

というのはぐぐればいくらでも出てきそうな感じですが、それでもはまる僕はなんなんですかね。ということで設定とか。基本的にはSinatraをCGIでもThin等のアプリサーバでも使えるようにする書き方 - 思っているよりもずっとずっと人生は短い。と同じなんだけど、ちょこちょこ違うとかなんとか。まあ、自分用メモですね。

1.9系の文字コード関係がいまだによく分かっていないので、そろそろどうにかしないといけない。

dispatch.cgi

さくらに用意されているRubyじゃなくて、自分でインストールしたRubyなので、パスを直で書いてる。あとはLOAD_PATHとかGEM_HOMEとかを教えてあげないといけないっぽい。environmentはcgiにしておかないとダメ。Encoding.default_externalのところはインストールしてるRubyが1.9系だからなんかやってます。

#!/home/syou6162/local/bin/ruby

$LOAD_PATH.unshift '/home/syou6162/local/lib'
ENV['GEM_HOME'] ||= '/home/syou6162/local/rubygems'
Encoding.default_external = 'UTF-8'
load 'start.rb'

set :run => false, :environment => :cgi

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

start.rb

上と大体同じ。1.9からはrequire 'rubygems'しなくてもいいっぽい。

$LOAD_PATH.unshift '/home/syou6162/local/lib'
ENV['GEM_HOME'] ||= '/home/syou6162/local/rubygems'
# require 'rubygems'
Encoding.default_external = 'UTF-8'
require 'sinatra'
require 'haml'
require 'sass'

get '/?' do
  haml :index
end

.htaccess

このアプリを置いてるディレクトリが/home/syou6162/wwwとかだとして、.htaccessもそこに置いてるとしたらこんな感じで書く。RewriteBaseとかで色々やってて動かなかったけど、これでよかった。。。

DirectoryIndex dispatch.cgi

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ dispatch.cgi/$1 [L]

たのしいRuby 第5版

たのしいRuby 第5版