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
sinatraをapacheで動かすために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です。