脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

sinatraをvhost上でpassengerを使ってサブディレクトリとして起動する場合

ディレクトリ構造

f:id:portaltan:20150914175412p:plain

①passenger.conf

・
・
PassengerEnabled off
<VirtualHost ${ipアドレス}:80>
    DocumentRoot    ${vhostのドキュメントルート}
    ServerName      ${vhost}
    <Directory "${vhostのドキュメントルート}/${vhost}/">
        PassengerAppRoot ${sinatraのアプリのルート}
        RackEnv production
        RackBaseURI /${sinatraアプリのpublicディレクトリのシムリンク名}
        PassengerEnabled on
    </Directory>
</VirtualHost>
  • 1行目の「PassengerEnabled off」で基本的にはPassengerを反映しないようにする
    • これが無いと全PageにPassengerが反映されてしまう
    • 下でディレクトリを限定してPassengerを反映させる

sinatraファイル

configure do
  set :public, File.dirname(__FILE__) + '/public'
end
  • sinatraは/css/test.cssみたいに記述すると、通常はsinatraアプリのrootから/public/css/test.cssを読み込んでくれる
  • しかしサブディレクトリをきると、それがずれてしまうので、今回は上記のように明示的に指定する

③jsやcssファイル内のリンク

今までのリンクの先頭に、${sinatraアプリのpublicディレクトリのシムリンク名(今回はsinatra_symlink)}を追加する

<script type="text/javascript" src="/js/test.js"></script><script type="text/javascript" src="/sinatra_symlink/js/test.js"></script>