Apache + Passenger で Sinatra アプリを動かす

Apache上で Sinatra を動かしたい(= デプロイしたい?) 場合, Passenger とやらを使うと簡単らしいのでインストールしてみた。

導入環境

  • Mac OS X 10.7.4
  • Apache 2.2.21
  • ruby 1.9.2p290

Passenger のインストール

% gem install passenger
% rbenv rehash
% passenger-install-apache2-module

rbenv を使ってないなら rbenv rehash は必要ない。
インストールが上手くいくと,

Please edit your Apache configuration file, and add these lines:

    LoadModule passenger_module /Users/crisis_tk/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
    PassengerRoot /Users/crisis_tk/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/passenger-3.0.12
    PassengerRuby /Users/crisis_tk/.rbenv/versions/1.9.2-p290/bin/ruby

こんな感じのメッセージが表示されるので, apache のコンフィグファイルに上記の三行を追加する。

自分の環境だと /private/etc/apache2/other/*.conf も include してくれるみたいだったので,
以下のようなファイルを作った。

/private/etc/apache2/other/passenger.conf

ここまでで Passenger のインストールは終わり。

Sinatra アプリの準備

Sinatra アプリを Apache + Passenger な環境で動かすためには, 以下のようなディレクトリ構成にする必要がある.

sinatra
├── app.rb
├── config.ru
├── public/
└── tmp/

app.rb は Sinatra アプリ本体。中身は省略!
config.ru ファイルは Passenger が Sinatra アプリを動かす際に必要なファイルだとか。
ファイルの中身は以下のような感じ。

1
2
require './app'
run Sinatra::Application

publictmp フォルダは空のフォルダでよい。 画像ファイル, Scriptファイルがあれば publicフォルダに入れる感じ。

これで Sinatra アプリの準備は終わり。

Apache の設定

と言ってもほとんどすることはない。 サブドメインで実行できるように DocumentRoot にシンボリックリンクをはる。

Mac だと DocumentRoot は /Library/WebServer/Documents/ らしいので,

% sudo ln -s /Users/crisis_tk/sinatra/public /Library/WebServer/Documents/hello-world

こんな感じでオッケー。 あとは, Apache のコンフィグファイルに次の一行を追加!

% cat /private/etc/apache2/users/crisis_tk.conf
...
RackBaseURI /hello-world
...

そんでもって最後に Apache の再起動。 これで http://your.domain.name/hello-world/ で動いてるはず。
最後の / を忘れると動かないことがあるので注意が必要。

参考

Comments