sinatra アプリを Passenger で「Sub URI」で動かす
Sub URIで動かすとは?
ドメイン単位ではなく、ドメイン配下のディレクトリをルートとして環境を構築する場合の話です。
例えば、 http://example.com/ をアプリケーションのルートとする場合ではなく、 http://example.com/hogehoge/ の hogehoge/ をアプリケーションのルートとして扱う場合です。
何がいいたい?
ぶっちゃけ、ドメインを取るまでもない sinatra アプリを、既存のドメイン内で動かしたいんだよってこと。
ディレクトリ構成
設定前に、事前にディレクトリ構成を書いておくと
Sinatra アプリ
/path/to/cgi-bin/sinatra_app/public
/path/to/cgi-bin/sinatra_app/tmp
/path/to/cgi-bin/sinatra_app/config.ru
/path/to/cgi-bin/sinatra_app/app.rb
ドキュメントルート
/path/to/htdocs
/path/to/htdocs/index.html
こんな感じだと思ってください。
共通設定
上記を参考にすると良いでしょう。
特に、PassengerRoot 等の設定 Sub URI で動かすとか関係ない部分ですので、パス自身は適宜環境に合わせるとして、以下のように httpd.conf に以下のように記載しておきます。
#################################### # LoadMocule #################################### LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so #################################### # Passenger Settings #################################### PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.2 PassengerRuby /usr/local/bin/ruby
Sub URI 用の設定(RackBaseURI せよ)
を参考に、
アプリケーションをシンボリックリンクしておく。
ln -s /path/to/sinatra_app/public /path/to/htdocs/sinatra_app
そして、それらをヒモづけるため、 httpd.conf を編集する。
DocumentRoot /path/to/htdocs RackBaseURI /sinatra_app
以上でOKなのだが、非常にドハマりしたことがあったので追記しておく。
Apache の設定を無駄にセキュアにしてしまっている人向け
こんな感じに、最初は全て OFF にし、必要なディレクトリだけに設定を許可しているような場合、ハマる可能性がある
<Directory/>
Order Deny,Allow
Deny from all
Options None #<-------ここが元凶!
AllowOverride None
</Directory>
Options None にしておくと、シンボリックリンクを辿ってくれないので、常に NotFound になるので、せめて htdocs だけでも、シンボリックリンクを許可してあげないといけない。
こんな感じで。
<Directory /path/to/htdocs>
Options +FollowSymLinks #<-------- ここで追加してやる
Order Allow,deny
Allow from all
</Directory>
これだけで2時間くらいハマったんだぜ\(^o^)/
こうすると
http://example.com/sinatra_app/ で Sinatra アプリに接続できるようになります!