shimada-kの日記

ソフトウェア・エンジニアのブログです

apache-passengerで動かすsinatra環境のよさげな設定

自宅サーバsinatraアプリを動かすことにしたので、既存のslimアプリとバッティングしない設定を試した時のメモです。

/var/www/slimにslimアプリがあるとします。slimアプリもsinatraアプリも

http://www.hoge.jp/slim/
http://www.hoge.jp/sinatra/

のようなパスでアプリを起動させるところを目指します。

環境:Linux debian 3.2.0-3-amd64 [debian wheezy]

apacheはすでにインストール済みとします。

sinatraアプリの開発環境のインストール

#apt-get install ruby rubygems
#gem install sinatra

sinatraapacheで動かすためにpassengerをインストールします。

#gem install passenger

passengerをインストールします。

#passenger-install-apache2-module

足りないものがあればコンソールに表示されるので、追加でインストールします。

apacheの設定

PassengerRootとPassengerRubyの箇所をmods-enabled/passenger.conに設定します。

<IfModule mod_passenger.c>
   RackBaseURI /sinatra
   PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.18
   PassengerRuby /usr/bin/ruby1.9.1
</IfModule>

sinatraアプリに必要なファイルを作成します。アプリのファイルはapp.rbにします。今回アプリのファイルは

#cd /var/www/sinatra
#mkdir public
#mkdir tmp
#touch app.rb

sinatraアプリはプロジェク直下のpublicディレクトリをDocumentRootに設定しないといけないのですが、その設定をしてしまうと他のアプリに影響がでることが多々あるかと思います。

sinatra
├── app.rb
├── config.ru
├── log.txt
├── public
└── tmp

そこでpublicディレクトリのシンボリックリンクを/var/wwwに以下に張って対応します。

#cd /var/www
#ln -s "リンク先" sinatra

これだけじゃ動かないのでRackBaseURLを設定します。私は上述のmods-enabled/passenger.confに設定しました。

さらにsinatraアプリの直下にconfig.ruを配置します。このファイルはpassengerが自動で読んでくれます。

require './app.rb'

run Sinatra::Application

以上でApacheを再起動すれば

http://www.hoge.jp/sinatra
sinatraアプリにアクセスできます。

ちなみに、リンクさえApacheが読めるところに貼ってやれば、実際のソースファイルの場所はどこでもOKです。