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 を使ってサブドメインではなく Rails と Sinatra を共存させる - oooooooo
- sinatra アプリを Passenger で「Sub URI」で動かす - まさにっき(コードで世界を変えたい人の記録)
passengerで実行するとコードを編集してもサーバーが読み込み直してくれない。
tmp/always_restart.txt という空のファイルを置いておくと毎回読み込み直してくれるようになるがsessionは空になるらしい