さくらレンタルサーバでSinatraを起動するまで

sinatraをローカルで動かせるようになったはいいが,実際に運用する段になって,やれCGIで起動させろとか,権限がどうとか,ディレクトリがどうとかでややこしいのでまとめる.

SSHをセットアップする

 これ一択.SAKURA Internet // サポート: SSH について
コンソールとしてPoderosa,ファイル転送にはWinSCPを使った.
それぞれ(アカウント.sakura.ne.jp)とパスワードとかで何とかなる.


Poderosaにて

%pwd
/home/YOUR_ID
%ls
MailBox, db, log, sblo_files, www, bin, lib, ports
%ruby -v
ruby 1.8.7 (2009-12-24 patchlevel 248) [i386-freebsd7]

今回rubyは標準装備の1.8.7を使う.インストールするのめんどくさいので.rubygemsも最初から入ってるやつ.

gemをインストールする

そのままだと権限がないので,事前にディレクトリを作って,

%mkdir lib
%mkdir lib/ruby
%mkdir lib/ruby/gem

そしてそれを.cshrcファイルに以下の行を追加することでgemのインストール先だよと教えてあげる.
/home/YOUR_ID/.cshrc

setenv GEM_HOME $HOME/lib/ruby/gem


これでgemの追加ができるので以下を実行する.いわずもがなrdocはお亡くなりになってもらう.

gem install rack -v=0.9.1 --no-rdoc --no-ri
gem install sinatra -v=0.9.2 --no-rdoc --no-ri


rackがこのバージョンはバグがあるらしく,このままだと内部エラーを吐くので修正する.

home/YOUR_ID/lib/ruby/gem/gems/rack-0.9.1/lib/rack/request.rbのl.113

これを↓
@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

sinatraを動かす

まずは,CGI動くか調べる.


/home/YOUR_ID/www/cgitestのディレクトリを作る.

%cd www
%pwd
/home/YOUR_ID/www
%mkdir cgitest

そこに以下の内容をtest.cgiの名前で保存する.rbじゃないよ

#!/usr/local/bin/ruby

print "Content-Type: text/html\n\n"
print "Hello World"

そして,パーミッションを0755にする.

%chmod 755 test.cgi

できたら,http://YOUR_ID.sakura.ne.jp/cgitest/test.cgiにアクセス.今から始まる無限の世界!とこんにちわする.


次はsinatraを動かす.注意すべき点は

  • cgiファイルはパーミッション0755.
  • cgiファイルをrubyで読んでもらうために1行目の#!も書くこと
  • さきほどの.cshrcは読まれないのでcgiファイル内にもgemがどこにあるか書いておくこと
  • daemon化(Webrickやらmongrelやら)は規約違反なので,サーバが駆動しないようにすること.
  • RackにCGIで動くよー!っていってあげること.
  • アドレスの最後に/をつける


それをまもったらこうなる.
home/YOUR_ID/www/sinapp.cgi

#!/usr/local/bin/ruby

ENV['GEM_HOME'] = '/home/YOUR_ID/lib/ruby/gem'
load 'app.rb'
set :run => false
Rack::Handler::CGI.run Sinatra::Application

chmod 755 sinapp.cgiを忘れないこと


home/YOUR_ID/www/app.rb

require 'rubygems'
require 'sinatra'

get '/' do
"Hello, Sinatra."
end

http://YOUR_ID.sakura.ne.jp/cgitest/sinapp.cgi/にアクセス.
最後にスラッシュを付けること.



**余談:面倒な動作を省略するためにgithubから部品を落としてくる
Sinatra-on-sakura-server - GitHub

  • readme
  • .cshrc(修正後)
  • test.cgi
  • sinapp.cgi←GEM_HOMEを修正する必要あり
  • app.rb

ただしサーバ設定のファイルも含むので責任は負えません.