passengerでsinatraアプリをサブディレクトリで実行する

http://github.com/shokai/sensor-storage

http://shokai.mag.keio.ac.jp/sensor-storage/
で実行した。


以前passengerのインストールそのものはしたが、サブドメインでの実行方法しかわからなかったので使ってなかった。thinでpreforkさせてmod_proxy_balancerでアクセス振り分けてサブドメインに見えるように動かしてた。
passenger、mod_railsインストール - 橋本詳解
今やりなおしたらpassenger-2.2.11になってた。それ以外のセットアップは同じ。


ディレクトリ構成はこうなってる。設定ファイルconfig.ruとpublicディレクトリが重要。

server
|-- config.ru
|-- db
|-- log
|-- main.rb
|-- public
|-- thin.yml
|-- tmp
|   `-- pids
`-- views
    `-- index.erb


config.ru

require 'rubygems'
require 'sinatra'

require 'main.rb'

run Sinatra::Application

main.rbを実行しろと書かれている



ドメイン直下、つまり http://shokai.mag.keio.ac.jp/sensor-storage/ で実行する場合
/etc/apache2/conf.d/sensor_storage.conf を作成

RackBaseURI /sensor-storage

とだけ書いておく。
conf.d/に置くファイル名はなんでもいいし、ひとつのファイルに複数のRackBaseURIを書いてもいい。


次にdocument rootにシンボリックリンクをはる。

ln -s /home/shokai/src/sinatra/sensor-storage/server/public /var/www/sensor-storage

main.rbの下のpublicディレクトリをlinkさせる。ディレクトリ名末尾に / はいらない。


apache再起動して完了。もう動いているはず。

sudo /etc/init.d/apache2 restart

参考

passengerで実行するとコードを編集してもサーバーが読み込み直してくれない。
tmp/always_restart.txt という空のファイルを置いておくと毎回読み込み直してくれるようになるがsessionは空になるらしい