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 |
|
public
と tmp
フォルダは空のフォルダでよい。
画像ファイル, 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/ で動いてるはず。
最後の /
を忘れると動かないことがあるので注意が必要。