さくらレンタルサーバで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]
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"
Hello World"
print "
そして,パーミッションを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
ただしサーバ設定のファイルも含むので責任は負えません.