Hello, world! from Sinatra


このエントリーをはてなブックマークに追加

Rubyの軽量WebフレームワークSinatraを使ってHello, world!を表示する簡単なアプリケーションを作ってみます。

動作環境

さくらVPS+nginx+rvm+passengerです。

動作に必要なソフトウェアのインストールは下記を参考にしてください。

Sinatraのインストール

$ gem install sinatra

プロジェクトディレクトリの構成

SinatraはRackの上で動いています。プロジェクトディレクトリの構成はRackアプリケーションと同じです。

RackでHello world!

次のようにプロジェクトを用意しました。

$ 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.rb

app.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.ru

config.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 の更新を検出するとプロセスを再起動します。

関連リンク