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