Rubyの軽量WebフレームワークSinatraを使ってHello, world!を表示する簡単なアプリケーションを作ってみます。
動作環境
さくらVPS+nginx+rvm+passengerです。
動作に必要なソフトウェアのインストールは下記を参考にしてください。
Sinatraのインストール
$ gem install sinatraプロジェクトディレクトリの構成
SinatraはRackの上で動いています。プロジェクトディレクトリの構成はRackアプリケーションと同じです。
次のようにプロジェクトを用意しました。
$ cd ~
$ cd nginx/html
$ pwd
/home/www/nginx/html
$ mkdir sinatra
$ mkdir sinatra/public
$ mkdir sinatra/tmp
 ユーザーは
 
  www
 
 、ホームディレクトリは
 
  /home/www
 
 、nginxのWeb公開ディレクトリは
 
  /home/www/nginx/html
 
 です。
nginx.confの設定
…
http {
…
    passenger_root /home/www/.rvm/gems/ruby-head/gems/passenger-3.0.11;
    passenger_ruby /home/www/.rvm/wrappers/ruby-head/ruby;
…
  server {
    location /sinatra {
      passenger_enabled on;
      root   html/sinatra/public;
    }
  }
...
}
...app.rb
$ cd ~
$ nano nginx/html/sinatra/app.rbapp.rb
require 'sinatra'
before do
  request.path_info.sub!(/^\/sinatra/,'')
end
get '/' do
    "Hello, world!"
end
 
  http://www.example.com/sinatra
 
 で動かします。
 path_infoには
 
  /sinatra
 
 という物理ディレクトリのパスが含まれてしまいます。
 
  request.path_info.sub!(/^\/sinatra/,'')
 
 としてマッチングパターンから余計な文字を取り除いています。
config.ru
$ cd ~
$ nano nginx/html/sinatra/config.ruconfig.ru
require './app'
run Sinatra::Application
 
  require './app'
 
 で
 
  app.rb
 
 ファイルを読み込みます。 パスには明示的に
 
  カレントディレクトリ
 
 (
 
  ./
 
 )を指定してください。
Sinatra(Rack)アプリケーションの再起動
 
  app.rb
 
 などのプログラムファイルを変更したときはSinatra(Rack)を再起動して変更を反映する必要があります。
$ cd ~
$ touch nginx/html/sinatra/tmp/restart.txt
 
  tmp
 
 ディレクトリに
 
  restart.txt
 
 というファイルを置きます。ブラウザからアクセスした時にSinatra(Rack)は
 
  restart.txt
 
 の更新を検出するとプロセスを再起動します。
